2014-12-03 2 views
0

Я хотел бы знать, если и как возможно динамически расширяет класс в AS2/3.
Что-то вроде:Можно ли динамически расширяться в AS2/3?

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

Я знаю, что этот код не так, а просто, чтобы показать вам, что мне нужно. Может быть, с прототипом?

+2

Можете ли вы описать сценарий где это было бы полезно? Вы потеряете всю статическую типизацию в своем классе. – Marty

+0

, когда проект разделен на множество swf-файлов, и вы хотите использовать общие библиотеки без увеличения размера проекта. – user2054758

+0

Если вы просто хотите делиться ресурсами между файлами, вы можете взглянуть на [Общие библиотеки времени выполнения] (http://stackoverflow.com/questions/2070244/runtime-shared-libraries). – blvz

ответ

0

На 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

+0

в моем случае, «MovieClip» - это внешний класс. Конечно, я могу загрузить его с помощью getDefinitionByName («MovieClip»), но что произойдет, если «MovieClip» имеет статические поля? – user2054758

Смежные вопросы