是否可以将方法添加到现有(内置)ActionScript Flash 类而不扩展它并创建一个新类?
Posted
技术标签:
【中文标题】是否可以将方法添加到现有(内置)ActionScript Flash 类而不扩展它并创建一个新类?【英文标题】:Is it possible to add method to existing (built in) ActionScript Flash class without extending it and making a new class? 【发布时间】:2011-07-25 07:46:17 【问题描述】:例如,我想创建自己的 fadeOut 方法并将其添加到 MovieClip 类,以便所有 MovieClip 都具有该方法,并像这样使用它:ball_mc.fadeOut()
我不想像这样扩展课程:
公共类 NewMovieClipClass 扩展 MovieClip ...
【问题讨论】:
【参考方案1】:您可以在 AS3 中使用prototype
:
MovieClip.prototype.foo=function():void
trace("this is a test");
;
var movieClip:MovieClip = new MovieClip();
movieClip.foo();//this is a test
【讨论】:
你测试过这个吗? MovieClip 扩展对象,它是动态的,因此可以附加其他方法和属性,而编译器不会抱怨。但是你用 Number 试过了吗?【参考方案2】:随着 Actionscript 3.0 的出现,Actionscript 不再是原型。这种做法实际上被认为是糟糕的面向对象设计,因为 MovieClip 类的用户会突然拥有新的方法或不可预测的方法,从而破坏了设计契约。我认为实现这一点的最简单方法是将 Sprite 或 MovieClip 子类化,添加您需要的方法。你不能这样做有什么原因吗?
【讨论】:
+1 同意你的回答,但你总是可以玩原型 原型与“动态”类修饰符无关:help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/… 是的,但是能够在没有 mc.foo() 导致问题的情况下进行编译。 我同意上述受访者的观点。你可以用原型做你所要求的,你可以决定你是否应该。 @Rudi 你可以在任何对象上使用原型,没有任何问题以上是关于是否可以将方法添加到现有(内置)ActionScript Flash 类而不扩展它并创建一个新类?的主要内容,如果未能解决你的问题,请参考以下文章