怎么可能用this
里面setInterval
和setTimeout
电话?
我想使用它,如:
function myObj() {
this.func = function(args) {
setTimeout(function() {
this.func(args);
}, 1000);
}
}
前一段时间我是做.onclick
事件是这样的:
this.click = function(func) {
this.elem.onclick = (function(func, obj) {return function(){func.apply(obj)} })(func,this);
};
但我不知道我该怎么做了它intervals
和timeouts
。
最简单的方法是只保存this
到本地。 本地self
不受具体的上下文改变setInterval
和setTimeout
回调被调用。 这反而维持原来的this
值
function myObj() {
var self = this;
this.func = function(args) {
setTimeout(function() {
self.func(args);
}, 1000);
}
}
从理论上讲 ,你可以做继续使用this
无处不在,并避免that
, self
等等这样的:
setTimeout.call(this, function() {
this.func(args);
}, 1000);
...要么...
setTimeout.apply(this, [function() {
this.func(args);
}, 1000]);
...... 但是 ,这样做会导致下面的错误在Firefox 22+:
NS_ERROR_XPC_BAD_OP_ON_WN_PROTO:上WrappedNative原型对象非法操作
如果你正在使用jQuery 1.4以上版本,您可以通过使用避免这种jQuery.proxy()
而不是call
或apply
:
setTimeout( $.proxy(function() {
this.func(args);
}, this), 50);
有一些更详细,并使用原生的ECMAScript 5的替代品,Underscore.js并在此等答案的prototype.js 。