こんにちは。スロースターター安藤です。
年明け最初のエントリーなので肩の力を抜いて小ネタでございます。
var s:Sprite = new Sprite(); s.hoge(); //エラー:未定義である可能性のあるメソッド hoge を.....
Spriteにはhogeなんてメソッドは無いのでコンパイルエラーで通らないのですが、↓のような場合はどうでしょう。
var s:Sprite = new HogeClass(); //HogeClassはSpriteを継承したクラスで、hoge();メソッドが定義されている。 s.hoge(); //しかし同様にエラー。
Spriteとしてオブジェクト化されたHogeClassオブジェクト。しかしhogeメソッドは未定義とされ呼べません。
コードの都合でどうしてもSpriteとして宣言する必要がある、でもhogeメソッドを一行だけでいいから呼ばせてほしい・・・そんな時はこうするとコンパイルを通過することができます。
var s:Sprite = new HogeClass(); s["hoge"](); //ちなみに var s2:Sprite = new Sprite(); s2["hoge"](); //でもコンパイルは通りますが実行時に結局エラーが出ます。
_トラックバック(0)
TrackbackURL : http://level0.kayac.com/cgi-bin/mt/mt-tb.cgi/1281
_コメント(2)
_コメントする
- AfterEffects
- AIR
- android
- Arduino
- AS2
- AS3
- as3
- BitmapData
- CHECKMATE
- crossdomain
- CS4
- Date
- DisplacementMapFilter
- Event
- event
- ExternalInterface
- FileReference
- FireBug
- FireFox
- Flash Lite
- FlashDevelop
- FlashPlayer10
- flash時計
- Flex
- Font
- GoogleMapsAPI
- INFINITY TANK BATTLE
- JSFL
- JSON
- Mobile
- mxp
- PaperVision3D
- Particle
- Progression
- Sound
- TextField
- Tips
- tool
- trace
- wonderfl
- Wonderfl
- xml
- アニメーション
- サンプルコード
- タイムライン
- デバッガ
- バグ
- フレーム
- ブログパーツ
- 爆速

(2)






(s as HogeClass).hoge()
でいけるのでは?
コメントありがとうございます。
(s as HogeClass).hoge();
HogeClass(s).hoge();
s["hoge"]();
このうちどれでも可能ですね。
上2つの方法は明示的に型変換して関数を呼ぶのに対し
このエントリーでも書いた一番下は本当にとりあえずって感じですね。
HogeClassにhogeメソッドが無かった場合も、上2つはコンパイルエラーとなりましたが下はコンパイルは通って実行時エラーとなるので、厳密に行きたいなら上2つを使用するのがよさそうです。