将对象内的变量传递到setTimeout

Passing variables from within object into setTimeout

本文关键字:setTimeout 变量 对象      更新时间:2023-09-26

我在将对象内的变量传递到setTimeout时遇到了一些有趣的问题。起初,我尝试将从setTimeout调用的函数放在我的对象上,这样我就不必向其中传递任何变量(我希望它可以自己访问我的对象)。这不起作用,显然是因为当我从setTimeout调用该函数时,它不知何故变成了全局函数,并且不再能够访问对象的变量。

这是我的下一次尝试,但也不起作用:

function MyObj() {
    this.foo = 10;
    this.bar = 20;
    this.duration = 1000;
    setTimeout(function(){
        AnotherFunction(this.foo, this.bar)
    }, this.duration);
}

那么,如何从对象中将变量传递到setTimeout中呢?不,由于各种不相关的原因,AnotherFunction将无法直接访问MyObj,所以这也是不可能的。

我认为问题在于,当您的函数执行时,this不再绑定到MyObj。你可以试试

function MyObj() {
    var that = this;
    this.foo = 10;
    this.foo = 20;
    this.duration = 1000;
    setTimeout(function(){AnotherFunction(that.foo, that.bar)}, this.duration);
}

或者我还有一个想法,如果不起作用的话。