从内部函数(Javascript)访问本地对象属性

时间:2013-12-27 22:04:36

标签: javascript jquery

我有一个Javascript对象试图从方法中的setInterval()内部访问本地属性,但显然是因为它试图在setInterval中调用函数的本地作用域,本地属性是返回undefined。这是代码:

function Timer() {
    this.remaining = 15000;
}

Timer.prototype.start = function() {
this.refreshId = setInterval(function() {
    console.log(this.remaining);
},1000);
}

如何访问本地“剩余”变量?谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个:

function Timer() {
    this.remaining = 15000;
}

Timer.prototype.start = function() {
    this.refreshId = setInterval(function(thisR) {
        console.log(thisR);
    },1000, this.remaining);
}

您可以将参数传递给setInteval函数,否则setInterval()内的this不是您的对象。

  

<强>语法
  var intervalID = window.setInterval(func,delay [,param1,param2,...]);
  var intervalID = window.setInterval(code,delay);

来源:MDN

答案 1 :(得分:2)

function Timer() {
    this.remaining = 15000;
}

Timer.prototype.start = function() {
var that = this;
this.refreshId = setInterval(function() {
    //this.adjust(-1000);
    that.remaining -= 1000;
    console.log(that.remaining);
    if (that.remaining <= 0) {
        that.remaining = 0;
        that.status = 'paused';
        clearInterval(that.refreshId);
    }
},1000);
}

在全局范围内调用setInterval函数。因此,您可以将'this'缓存为另一个变量(例如,'that',这在开发人员中很常见。)

另一个选择是提出一个.bind函数或方法,您可以通过搜索Google找到该怎么做。

阅读:Understanding Javascript Closures with Ease