【问题标题】:Is it possible to extends dynamically in AS2/3?是否可以在 AS2/3 中动态扩展?
【发布时间】:2014-12-03 21:59:41
【问题描述】:

我想知道是否以及如何动态扩展 AS2/3 中的类。
类似的东西:

public class Main extends getDefinitionByName("com.parent") as Class{...}

我知道这段代码是错误的,但只是为了向您展示我需要什么。也许有原型?

【问题讨论】:

  • 您能否描述一个有用的场景?您将失去课堂上的所有静态类型。
  • 当一个项目被拆分成很多 swf 文件并且你想使用共享库而不增加项目大小时
  • 如果你只是想跨文件共享资源,你可能想看看Runtime Shared Libraries
  • 顺便说一句,这个问题的答案是你不能在 ActionScript 3 中使用类系统来做到这一点。您可以使用普通对象来模拟类系统,这些对象从其他对象继承属性和方法,就像人们在 JavaScript 中编写“继承”一样。

标签: actionscript-3 actionscript-2


【解决方案1】:

在 AS2 上,这很简单:

trace("creating mc0");
this.attachMovie("libraryItemLinkage", "mc0", 0);

MovieClipPlus = function (){
  trace("hello world.");
};
MovieClipPlus.prototype = new MovieClip();
Object.registerClass("libraryItemLinkage", MovieClipPlus); 

trace("creating mc1");
this.attachMovie("libraryItemLinkage", "mc1", 1);

对于 AS3,事情就没有那么简单了。事实上,它是如此复杂(而且速度很慢),以至于想出另一种方法来完成你正在尝试的事情会更容易。

但如果你还有时间和精力,不妨看看flash.utils.Proxy 课程,它会给你一些新的想法。

另外,检查这些:

代理介绍
http://ltslashgt.com/2008/01/24/proxy-class-as3/

动态代理创建,使用 AS3 通用字节码
http://www.as3commons.org/as3-commons-bytecode/proxy.html

【讨论】:

  • 在我的例子中,“MovieClip”是一个外部类。当然我可以用 getDefinitionByName("MovieClip") 加载它,但是如果“MovieClip”有静态字段会发生什么?
猜你喜欢
  • 2011-06-25
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 2018-08-16
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多