【发布时间】:2015-11-23 01:36:11
【问题描述】:
这是我项目的一个非常简化的版本。
我有一个类文件:
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 的跟踪返回“未定义”。我已经在 .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范围的问题,看这里,是setInterval页面,但是setTimeout的范围是一样的help.adobe.com/en_US/AS2LCR/Flash_10.0/…
-
谢谢。尝试将对象添加到参数中,但仍然无法更改未定义的变量。如果我的语法不正确,您介意用我的代码发布一个示例吗?
-
不幸的是我没有 Flash CS6 来测试代码,所以只能给出建议,尝试使变量和函数静态,例如静态公共函数 DoStuffMethod() 和静态公共 var myNumberStoredInClass:Number;
-
将变量更改为静态有效,非常感谢。我不知道这是为什么?您想将其作为答案发布,以便我将其标记为已解决吗?
标签: flash actionscript scope actionscript-2 flash-cs5