2013-12-16 162 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