2013-12-16 117 views
0

我有一个带有匿名触摸事件功能的MovieClip,当我执行this.gotoAndStop(2)时,出现一个错误,说gotoAndStop() is not a function。但是,在一个非匿名函数中,我不会得到这个错误。gotoAndStop()在匿名函数中?

任何原因为什么?

回答

1

最有可能的this是不是你所期望的。

围绕this的一种方法是:将“this”捕获到局部变量中并在函数中使用它。

.... 
var me = this; 
whatever.addEventListener("foo", function(v:TypeOfEvent) 
{ 
    // note that this != me here 
    me.gotoAndStop(); 
} 

如果您对成员函数做同样的动作脚本会自动捕获“本”,它会被“绑定”正常为ActionScript:FunctionsBound methods文章descripted:

方法的行为类似,它们还保留有关它们所创建的词汇环境的信息。当一个方法从它的实例中提取出来时,这个特性是最引人注目的,它创建了一个绑定方法。函数闭包和绑定方法之间的主要区别在于,绑定方法中this关键字的值总是指它最初附加的实例,而在函数闭包中,this关键字的值可以更改。成员函数memeberFunction内的this

所以下面的代码将有预期值:

whatever.addEventListener("foo", memberFunction); 

注:ActionScript中必须的JavaScript非常相似的规则,规定this在匿名函数,所以你会发现How does the "this" keyword work?问题非常有用。

+0

没有什么似乎。 – Cilan