2011-06-28 140 views
0

如何访问动态创建的动画片段/对象的方法?AS3访问动态创建的动画片段的方法

为了简单起见,我没有发布如何动态创建动画片段的代码。相反,假设它已经创建。这是一个对象。它被称为field_2。在它下面用getChildByName('field_'+ field.id)引用;

Check_box_component.as

public var testVar:String = 'test'; 

public function testReturn() 
{ 
    return 'value returned'; 
} 

Main.as

var temp:MovieClip = MovieClip(getChildByName('field_' + field.id)); 
trace(temp); 
trace(temp.testReturn); 
trace(temp.testVar); 

输出:

[object Check_box_component] 
function Function() {} 
test 

当我追查temp.test返回,它为什么显示“函数Function(){}”而不是“返回值”?

下面的这个链接帮助我得到了这一点。

http://curtismorley.com/2007/06/13/flash-cs3-flex-2-as3-error-1119/

回答

1

你尝试过: 跟踪(temp.testReturn()); ...而不是你的 跟踪(temp.testReturn); ...?

我想你会得到你正在等待的结果。

其实,在做“temp.testReturn”时,你并没有调用该函数。您需要添加括号才能进行实际的通话。

当您对temp.testReturn进行跟踪时,该函数未执行:跟踪函数告诉您temp.testReturn的类型,它在此处正确返回为“函数”类型。

1

函数引用和函数调用之间有区别。括号'()'是ActionScript的操作符。他们告诉编译器“请试着打电话给我们后面的东西”。或者至少我希望他们那么有礼貌。

ActionScript中的函数是一个对象,就像所有其他的东西一样。 Function类的成员。你可以传递它的参考,你甚至可以调用它的方法,如call()或apply()。

如果你想要一个呼叫,而不是一个参考,你必须使用呼叫运营商。

trace(temp.testReturn());

编辑我在打字时接受了一个答案,抱歉有重复的答案。

+0

我更喜欢你的解释,因为你解释了“为什么”的幕后故事, – divillysausages

相关问题