ActionScript 3.0 とか絶対ムリwwwPart2 (220レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
138: Now_loading...774KB [] 2010/12/21(火) 18:18:49 ID:6+PFQTFO(1/2) AAS
>>137
独自の型には foo プロパティが定義されているけどもDisplayObject 型には定義されていないので、
DisplayObject として扱っているときは(データはあるけども)見に行けない様にしているだけ。
(AS3 ではタイプミスとかの為に、指定した型で存在しないプロパティやメソッドはコンパイルエラーで叩く)
// Event.target は Object 型なので、実行時に指定した名前 (この場合は name や foo) があれば見に行く。
// Object 型は特殊で、いかなる時も実行時にあればおkとしてくれる。(「ランタイムアクセス」に勝手になるため)
trace( "name: "+event.target.name+" foo: "+event.target.foo );
// 型変換とは、まるでその型であるかのように振る舞うように型にはめるもの。
// この場合は DisplayObject を扱っているかのようにする。
var targetE :DisplayObject = event.target as DisplayObject;
// ここで、DisplayObject 型には foo プロパティは定義されていないので、直接見ることはできない。
// ※ foo プロパティは独自の型で新しく定義されているため。
// trace( "name: "+targetE.name+" foo: "+targetE.foo );
// そこで、リンゲージで指定した型 (仮に Mogera とする) にもう一度型変換することで、
// そのオブジェクトを Mogera を扱うようにすることで foo を見に行ける。
trace("name: " + targetE.name + " foo:" + (targetE as Mogera).foo);
// ただ、子クラスに型変換をする場合、DisplayObject を継承していないと型変換に失敗する。
// as 演算子だと null になるから null チェックが必要だけど、エラーにしてほしいときは
// 型名( 変換したいもの ) とすると型変換ができないときはエラーが出る。
trace("name: " + targetE.name + " foo:" + Mogera(targetE).foo);
// Object 型の時の様にランタイムアクセスをするために、[] アクセス演算子を使うという手もある。
// ただ、コンパイルエラーが出なくなるし、パフォーマンスが落ちる事が多いので、
// 出来れば、ちゃんと型変換をしてあげればいい。
trace("name: " + targetE.name + " foo:" + targetE["foo"]);
// ちなみに、DisplayObject と互換性ありと表現したそれは、「DisplayObject を継承」ってことだよね。
139: Now_loading...774KB [] 2010/12/21(火) 18:20:28 ID:6+PFQTFO(2/2) AAS
あ、ミスった。
誤: // ただ、子クラスに型変換をする場合、DisplayObject を継承していないと型変換に失敗する。
正: // ただ、子クラスに型変換をする場合、Mogera を継承していないと型変換に失敗する。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.014s