我有一个Javascript对象试图从方法中的setInterval()内部访问本地属性,但显然是因为它试图在setInterval中调用函数的本地作用域,本地属性是返回undefined。这是代码:
function Timer() {
this.remaining = 15000;
}
Timer.prototype.start = function() {
this.refreshId = setInterval(function() {
console.log(this.remaining);
},1000);
}
如何访问本地“剩余”变量?谢谢!
答案 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