类属性会失去范围,并且无法在setTimeout之后设置

时间:2015-08-28 11:39:33

标签: flash actionscript scope actionscript-2 flash-cs5

这是我项目的一个非常简化的版本。

我有一个类文件:

class MyClass{

public var myNumberStoredInClass:Number;

// constructor
function MyClass(myNumber:Number){
    this.myNumberStoredInClass = myNumber;
};

// some method
function DoStuffMethod(){
    trace(this.myNumberStoredInClass);
};

}; // end class

我有一个普通的.as文件,我可以从中访问this.myNumberStoredInClass,MyClass.myNumberStoredInClass没有任何问题,直到我为类中的方法调用setTimeout:

function ASFileFunction(){

    trace(MyClass.myNumberStoredInClass); // works fine

    setTimeout(MyClass.DoStuffMethod, 7500);

};

当在类文件中触发DoStuffMethod时,myNumberStoredInClass的跟踪返回' Undefined'。我已经在.as文件中的许多其他函数中使用了该值,但是在setTimeout之后它已经丢失了。

我真的很奇怪,我可以将DoStuffMethod更改为以下内容,myNumberStoredInClass仍然是Undefined:

function DoStuffMethod(){

// I've tried watching this in debug mode and it just won't set, remains Undefined


myNumberStoredInClass = 10; 

    trace(myNumberStoredInClass); // returns Undefined
};

我尝试在DoStuffMethod中使用this.myNumberStoredInClass,但结果是一样的。我只是无法设置或检索变量!如果我在setTimeout之后立即执行跟踪,那么值就会存在,但是一旦setTimeout触发,则无法设置该值。

我必须使用AS2。

有什么想法吗?非常感谢。

编辑:尝试按照Sant gMirian建议的文档将对象添加到setTimeout调用,但结果仍然相同。

1 个答案:

答案 0 :(得分:0)

封闭应该有效。你的代码:

 setTimeout(MyClass.DoStuffMethod, 7500);

变为:

 setTimeout(function () { MyClass.DoStuffMethod() }, 7500);

顺便说一下,我假设 MyClass 是你班级的一个实例,而不是你的班级定义。

这也应该有效:

function haveStuffDone () : void {
    MyClass.DoStuffMethod();
}
setTimeout (haveStuffDone, 7500);

其中 haveStuffDone 是在您从 setTimeout 调用的相同上下文中定义的函数。

希望这有帮助。