这就是我想要做的,但它不起作用,它显示的错误是:this.run 不是一个函数。上线(this.xId = window.setInterval('this.run()', 2500);)
function(){
this.run = function(){
DO SOMETHING;
}
this.xId = window.setInterval( 'this.run()', 2500 );
}
可能是什么原因 ?
这就是我想要做的,但它不起作用,它显示的错误是:this.run 不是一个函数。上线(this.xId = window.setInterval('this.run()', 2500);)
function(){
this.run = function(){
DO SOMETHING;
}
this.xId = window.setInterval( 'this.run()', 2500 );
}
可能是什么原因 ?
您需要为此传递匿名函数:
this.xId = window.setInterval( function() { this.run() }, 2500 );
或者更好的是将此函数与上下文绑定:this
this.xId = window.setInterval( this.run.bind(this) , 2500 );
请注意,这bind
是在 ECMA-262 第 5 版中实现的,因此为了实现跨浏览器兼容性,您需要添加以下内容:
if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
// closest thing possible to the ECMAScript 5 internal IsCallable function
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
}
var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () {},
fBound = function () {
return fToBind.apply(this instanceof fNOP
? this
: oThis || window,
aArgs.concat(Array.prototype.slice.call(arguments)));
};
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
};
}
首先,超时回调使用函数引用而不是字符串。this
when using a string 是全局对象,而不是可能提供它的对象。
其次,缓存 的值this
。回调中的this
可能与它外部的不同(即带有 的那个run
)。
function(){
var that = this; //cache "this"
this.run = function(){
//DO SOMETHING;
}
this.xId = window.setInterval(function(){
that.run()
},2500);
}