オブジェクトを代入した変数の正体
本日は予定を変更して、別のレポートをお送りいたします。
世間ではスデに常識だと思われることですが、
僕は知らなかったし、応用範囲が広すぎるので忘れないうちにレポートにしておきます。
タイトルどおり、オブジェクトを代入した変数ですが、
今まで僕は、
var testObj1:TestClass = new TestClass(); var testObj2:TestClass = testObj1;
とした場合、testObj1とtestObj2は別物で、
TestClassインスタンスが2つできるものだと思っていました。
そこで実験です。
以下の2つのファイルを用意します。
TestParent.as
class TestParent { var atai:String; private var obj:TestChild; function TestParent() { atai = "Yes!"; trace(atai); obj = new TestChild(this); trace(atai); } }
TestChild.as
class TestChild { function TestChild(parentObj:TestParent) { parentObj.atai += "Yes!"; var obj:TestParent = parentObj; obj.atai += "Yes!"; } }
そしてflaファイルのフレーム1にでも、
var test:TestParent = new TestParent();
とでも書いて実行してみます。
出力は
Yes! Yes!Yes!Yes!
となりました。
・・・ということは、
オブジェクトをほかの変数に代入しても、
実際に存在するオブジェクトは1つしかないということが分かります。
すべて同期している・・・というより、
Cのポインタに似ているという解釈でいいのでしょうか。
これを使えば、タスクシステムに子タスクを導入できそうです。
さらに、シーン管理(というより作成支援)も作れそうです。
大幅に進むことができそうです。
色々誤解しながら覚えてしまっているなぁ...。
と思いました。