MovieClip.addChild()で複数の親にaddChildできない理由

AS3の、DisplayObject.parentとDisplayObjectContainer.addChild()との微妙な関係について、さらっと。
1
smw @Shi_MeiWo

AS3のMovieClipは「コンテナ」と認識しがちだけど、実は自分の「子」の情報は持っていない。持っているのは「親(parent)」への参照のみ。包含を作っているのではなく「子から親」への一方通行の参照を、包含に見せかけているだけだ。(続く)

2012-09-07 14:34:32
smw @Shi_MeiWo

(承前)a.addChild(b)は「aに対しbを組み込むよう命令する」のではなく「bに対してaの参照を割り当てる」…そう、実は「引数」側をいじるメソッドだったのだ! この直後にc.addChild(b)とすると「aの中からbが消える」のも当然。bの参照を書き換えているんだから。

2012-09-07 14:40:34
smw @Shi_MeiWo

(承前)AS3の強力さと不可解さは、この「子から親への参照を作る=親の中に子を表示」というチグハグさにある。直感的なふりをして、まったく直感的ではないんだからタチが悪い。 でもここが理解できれば、軽やかでスマートなコーディングの一助になるだろう。 (以上)

2012-09-07 14:49:02

補足

instanceA.addChild(instanceB);

とすると、instanceB.parentがinstanceAになる。
instanceB.parentは唯一のプロパティ(当たり前だが)なので、この内容が書き換わる=「包含対象が変わる」(というか、FlashPlayerはそのように表示するようにできている)
すなわち、

A.addChild(B)とは、「B.parentへAの参照を渡すsetter」である

というわけ。「包含を変えるにはB.parent=Aと書きましょう」なんてムズカシイ事を言いたくないがためのシンタックスシュガー。
このプロパティがread-onlyであるのも、addChild()との関連を疑われ、いらぬ混乱を生むのを防ぐためだろうなぁ。