Flash 中 Object.registerClass("linkname":String,class:Object) 一点使用体会

来源:互联网 发布:2017虚拟网络黄金egd 编辑:程序博客网 时间:2024/05/17 06:21

第一个话题:为什么会用到registerClass?

通常来说是为了使MovieClip用起来更灵活,使代码更集中,更容易复用,将一个mc注册为另外一个(通常是自己写的)class,而这个class一般要在定义时写上 extends MovieClip。这是因为我们凭空写的一个class大多是不能独立在Stage中显示的。

当我们将一个mc注册为一个extends MovieClip的class后,就可以对其添加一些我们希望的属性方法,或修改其方法,例如:修改 function onRelease(),已达到期望的效果。

 第二个话题:注册了registerClass,其将在什么时候初始化什么部分?或者说什么时候执行我们自己写的构造方法,在执行那个构造方法之前,还会做什么工作?

我稍微试了一下,在一个mc中添加了:

#initclip 40

Object.registerClass("name",UI.Component);

trace("init Component");

#endinitclip

并在UI.Component的构造函数里添加了:

trace("init Component 2");

为了作为比较,在另一个mc中添加了:

#initclip 41

trace("这个应该后构造");

运行后发现:

“init Component”果然在“这个应该后构造”之前出现(由40,41决定了构造顺序),而“init Component 2”并没有出现。

也就是说在flash初始化的时候,并没有调用注册的class里的构造函数。

当我们在Stage中用attachMovie("name","name_mc",this.getNextHighestDepth()),引用那个mc时,才出现了“init Component 2”。

第三个话题:也是一个容易犯的错误:

在Object.registerClass("name",UI.Component)中注册的name应该和“链接”中“在ActionScript中导出的”命名相同,而不是和mc的命名相同。

原创粉丝点击