是否可以将方法添加到现有(内置)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 类而不扩展它并创建一个新类?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将方法添加到 Scala 中的内置类型?

是否可以将分区添加到 Kafka 0.8.2 中的现有主题

可以使用 ASM 向现有 Java 类添加方法吗?

是否可以将“文本”添加到 swig 中的现有类型映射?

需要一种内置方式来为现有存储库添加死锁弹性到 Dapper 而不更改它们

是否可以附加到现有文件的第一行?