これはまったくナンセンスであり、本当に悪い習慣です。このようなコーディングは避けるべきです!!!
これは実際には OOP ではなく、悪い 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);
スクリプト全体を変更した方がよいでしょう。
アドビは、エクスポート設定が AS3 に設定されており、厳密モードが常に厳密モード ON に設定されている必要があるため、タイムラインにスクリプトを書き込む可能性を削除する必要があります。の使用を許可するために、プライベート コンストラクターも歓迎されます。
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 nonsense:String = "これはナンセンスです"; var mclss:MyClass = new MyClass(this);
EventDispatcher に関しては、ここで EventDispatcher に関する私の回答を読むこともできます