![](/img/trans.png)
[英]How can i properly use flyTo() with setInterval() or setTimeout() Javascript functions?
[英]How do I change scope of “this” in setInterval and setTimeout functions
怎么可能用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
到本地。 调用setInterval
和setTimeout
回调的上下文不会更改本地self
。 它将保持原始的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
来避免这种apply
:
setTimeout( $.proxy(function() {
this.func(args);
}, this), 50);
在另一个答案中,有一些更详细的信息,以及使用原生ECMAScript 5 , Underscore.js和prototype.js的替代方案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.