旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

AS3のデータ型がよくわからない

2007年10月18日

ActionScript3のデータ型がよくわからんす。
というのも
以下のコードは正常にコンパイルされ、正常に動作する

// BoxクラスはSpriteクラスのサブクラス
var box:Box = new Box();
var sprite:Sprite = Sprite(box);
var box2:Box = Box(sprite);
// BoxクラスにあってSpriteクラスに無いプロパティにアクセス
trace(box2.hoge); // アクセス可能

Box→Spriteの型変換の時点でhogeプロパティが消えていないということは、オブジェクトの型の情報は、オブジェクトの内容とは別にラベルのように存在するのかなぁ??

ちなみに全く関係の無いクラスだと型変換に失敗する。
以下のコードはStrictモードでも正常にコンパイルされるが、Errorを出して実行が止まる

// BoxクラスとEventクラスは全く関係ない
var box:Box = new Box();
var evt:Event = Event(box); // -> Error

Error はこんなん

TypeError: Error #1034: 強制型変換に失敗しました。Box@xxxxxxx を flash.events.Event に変換できません。
at xxxx/::xxxxxxxx()
んー、JavaScriptとPHPとRubyしか知らない俺ですけど、AS3のデータ型って、「後付けで作った感」がプンプン臭う。

どうなんでしょうかなぁ