Class 属性 失去范围并且无法在 setTimeout 之后设置
Class property looses scope AND can't be set after setTimeout
这是我的项目的一个非常简化的版本。
我有一个 class 文件:
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 没有问题,直到我为 class 中的方法调用 setTimeout:
function ASFileFunction(){
trace(MyClass.myNumberStoredInClass); // works fine
setTimeout(MyClass.DoStuffMethod, 7500);
};
当在 class 文件中触发 DoStuffMethod 时,跟踪 myNumberStoredInClass returns 'Undefined'。我已经在 .as 文件中的许多其他函数中使用了该值,但在 setTimeout 之后它丢失了。
真正奇怪的是,我可以将 DoStuffMethod 更改为以下内容,而 myNumberStoredInClass 仍未定义:
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 调用,但结果仍然相同。
关闭应该有效。您的代码:
setTimeout(MyClass.DoStuffMethod, 7500);
变成:
setTimeout(function () { MyClass.DoStuffMethod() }, 7500);
顺便说一下,我假设 MyClass 是您 class 的一个实例,而不是您的 class 定义。
这也应该有效:
function haveStuffDone () : void {
MyClass.DoStuffMethod();
}
setTimeout (haveStuffDone, 7500);
其中 haveStuffDone 是在您调用 setTimeout 的同一上下文中定义的函数。
希望这对您有所帮助。
这是我的项目的一个非常简化的版本。
我有一个 class 文件:
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 没有问题,直到我为 class 中的方法调用 setTimeout:
function ASFileFunction(){
trace(MyClass.myNumberStoredInClass); // works fine
setTimeout(MyClass.DoStuffMethod, 7500);
};
当在 class 文件中触发 DoStuffMethod 时,跟踪 myNumberStoredInClass returns 'Undefined'。我已经在 .as 文件中的许多其他函数中使用了该值,但在 setTimeout 之后它丢失了。
真正奇怪的是,我可以将 DoStuffMethod 更改为以下内容,而 myNumberStoredInClass 仍未定义:
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 调用,但结果仍然相同。
关闭应该有效。您的代码:
setTimeout(MyClass.DoStuffMethod, 7500);
变成:
setTimeout(function () { MyClass.DoStuffMethod() }, 7500);
顺便说一下,我假设 MyClass 是您 class 的一个实例,而不是您的 class 定义。
这也应该有效:
function haveStuffDone () : void {
MyClass.DoStuffMethod();
}
setTimeout (haveStuffDone, 7500);
其中 haveStuffDone 是在您调用 setTimeout 的同一上下文中定义的函数。
希望这对您有所帮助。