Это полная ерунда и действительно плохая практика. Вам следует избегать такого способа кодирования!!!
Это действительно не ООП и заставляет меня думать о плохих AS1/2 и 3 вместе взятых!!!
Однако это возможно, если у вас нет класса, определенного в свойствах документа в качестве основного класса.
пример: в папке "com" класс ObjectOnStage.as:
package com {
import flash.display.Stage;
import flash.display.Sprite;
import flash.events.Event;
public class ObjectOnStage extends Sprite{
public function ObjectOnStage() {
this.addEventListener(Event.ADDED_TO_STAGE,onAddedToStage,false,0,false);
this.addEventListener(Event.ACTIVATED,onActivate,false,0,false);
}
public function onAddedToStage(e:Event):void{
// will output null for both
trace("\n added " + e.target + "\n");
trace(e.target.parent["nonSense"]);
trace(e.target.parent["nonsense"]);
}
public function onActivate(e:Event):void{
// will output the values.
trace("\n added " + e.target + "\n");
trace(e.target.parent["nonSense"]);
trace(e.target.parent["nonsense"]);
}
}
}
На кадре 1 временной шкалы:
import com.ObjectOnStage;
var nonSense:int = 1;
var nonsense:String = "This is a nonsense";
var oos:ObjectOnStage = new ObjectOnStage();
this.addChild(oos);
Вам лучше изменить весь сценарий!
Adobe следует удалить возможность записи сценария на временной шкале, поскольку для параметров экспорта задано значение AS3, а для строгого режима всегда должен быть включен строгий режим. Также будут приветствоваться частные строители, чтобы разрешить использование
MyClass.getInstance();
Это позволит что-то вроде:
package com {
public class MyMainObject {
private static var instanceOfMainObject;
private function MyMainObject(args:Vector.<String>){
// or MyMainObject(...args)
trace("new Instance of MyMainObject created with " + args.toString());
}
public static function main(args:Vector.<String>):void{
instanceOfMainObject = MyMainObject.getInstance(args);
trace("arguments.length = " + args.length);
for(var i:int = 0 ; i < args.length ; i++){
trace( i + " = " + args[i]);
}
}
public static function getInstance(args:Vector.<String>):MyMainObject{
var instance:MyMainObject = new MyMainObject(args);
return instance;
}
}
}
Теперь этот код выдает ошибку:
1153: A constructor can only be declared public.
Возможно так и будет в AS4???
Если я понимаю это из вашего комментария, вы должны передать DisplayObjectContainer, где ваши переменные объявлены классу в качестве аргумента.
Пример: в MyClass.as
package com {
import flash.display.DisplayObjectContainer;
import flash.events.EventDispatcher;
public class MyClass extends EventDispatcher{
public function MyClass(doc:DisplayObjectContainer) {
trace(doc["nonSense"]);
trace(doc["nonsense"]);
// but this is again not OOP even if you use the "class" KEYWORD.
}
}
}
на временной шкале: var nonSense:int = 1; var бред:String = "Это бред"; var mclss:MyClass = новый MyClass(этот);
Что касается EventDispatcher, вы также можете прочитать мой ответ о EventDispatcher здесь
09.05.2012
public final class Bcoder extends EventDispatcher {
Спасибо. 09.05.2012