2011-01-26 27 views
0

這對我虛弱的大腦沒有任何意義,而且我已達到googlefu的限制。原型方法無法在textField上工作

我有一堆原型方法,我用它來加速開發,其中大部分都附加到DisplayObjectInterActiveObject。這裏有一個這樣的原型的例子:

DisplayObject.prototype.$click = function(clicked:Function, released:Function = null):void{ 
    this.addEventListener(MouseEvent.MOUSE_DOWN, function():void { 
      clicked(); 
     }); 

    if(released != null){ 
     this.addEventListener(MouseEvent.MOUSE_UP, function():void { 
      released(); 
     }); 
    } 
} 

如果我調用任何movieClipInstance.$click(someFunction),它正確地結合。但是,如果我試圖在TextField實例上執行此操作,它會給我以下編譯時錯誤。 Call to a possibly undefined method $click through a reference with static type flash.text:TextField.

據參考,TextField繼承DisplayObject,但只是要確定我重新定義了我的原型爲明確TextField秒。還是一樣的錯誤。 :(

+0

我已經在AS3學習了自己的原型方法,並且提出了一個令人失望的答案。我將把它放在下面:( – MrLeap 2011-01-26 18:32:21

回答

1

您可以隨時擴展TextField和添加方法有,在事實上,你應該考慮爲所有其他目標做這件事ts以及:擴展MovieClip,Sprite或其他任何想要添加$ click方法的DisplayObject。然後讓所有其他對象繼承ClickMovie,ClickSprite等,而不是泛型類。它不應該有更多的代碼來編寫,但是你的應用程序會更快更安全。

只有在必須在運行時動態添加或覆蓋方法或屬性的情況下,才應使用原型。

有關繼承在AS3中的工作原理的深入說明,請參閱here

+0

)不幸的是,你不能在設計器中聲明一個TextField作爲TextField的子類,如果你想在你的文本字段中使用自定義方法,那麼你就不能使用設計器來佈局你的文本字段,如果你想使用設計器來佈局你的文本字段,那麼你不能在你的文本字段上使用自定義方法。由於不允許非動態類的原型方法,Adobe已經成功地使這兩個特性相互排斥;失敗 – Triynko 2012-07-24 17:14:05

0

顯然,原型方法只能被分配到與dynamic關鍵字聲明類。在otherhand跑到參考,看看我的經歷相匹配這一說法果然TextField被定義爲public class TextFieldMoveClip被定義爲public dynamic class MovieClip

似乎有點靠不住,我認爲非動態類仍無法訪問其動態祖先的原型方法雖然再次繼承來襲!

相關問題