使用此方法从嵌套函数内部获取值

时间:2019-03-29 12:05:52

标签: javascript oop object constructor this

我有一段代码,在一个主代码中有两个嵌套函数。

如何使用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 个答案:

答案 0 :(得分:3)

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 :(得分:1)

您可以使用方法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());