Получить значения из вложенной функции, используя это - PullRequest
0 голосов
/ 29 марта 2019

У меня есть фрагмент кода, который имеет две вложенные функции внутри основной.

Как мне получить вложенные функции, используя ключевое слово this?Возможно ли это?

Я пробовал times().present() и new times().present(), ни один из них, похоже, не работает и возвращает undefined.

Я нашел похожие примеры на w3School , но, кажется, не могу реализовать это в этом случае.

Заранее спасибо.

function times() {
  var timingObj = function() {
    this.present = currentTime;
    this.past = pastTime;
  };

  var currentTime = function() {
    var hourMin = new Date().getHours() + ":" + new Date().getMinutes();
    return hourMin;
  };

  var pastTime = function() {
    if (new Date().getDay() == 5) {
      return "07:40"
    } else {
      return "16:30"
    }
  };
  return timingObj;
}

console.log(times().present());
//console.log(new times().present());

Ответы [ 2 ]

3 голосов
/ 29 марта 2019

function times() {
  var currentTime = function() {
    var hourMin = new Date().getHours() + ":" + new Date().getMinutes();
    return hourMin;
  };

  var pastTime = function() {
    if (new Date().getDay() == 5) {
      return "07:40"
    } else {
      return "16:30"
    }
  };
  
  return {
    present: currentTime,
    past: pastTime
  };
}

console.log(times().present())
1 голос
/ 29 марта 2019

Вы можете использовать метод call().

function times() {
  var timingObj = function() {
    this.present = currentTime;
    this.past = pastTime;
  };

  var currentTime = function() {
    var hourMin = new Date().getHours() + ":" + new Date().getMinutes();
    return hourMin;
  };

  var pastTime = function() {
    if (new Date().getDay() == 5) {
      return "07:40"
    } else {
      return "16:30"
    }
  };
  return timingObj;
}

times().call(null);
console.log(present(), past());

ИЛИ определите их как prototype

function times() {
  var timingObj = function() {
    this.present = timingObj.prototype.currentTime;
    this.past = timingObj.prototype.pastTime;
  };

  timingObj.prototype.currentTime = function() {
    return new Date().getHours() + ":" + new Date().getMinutes();
  };

  timingObj.prototype.pastTime = function() {
    return new Date().getDay() === 5 ? "07:40" : "16:30";
  };

  return timingObj;
}

console.log(times().prototype.currentTime(), times().prototype.pastTime());

//times().call(null);
//console.log(present(), past());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...