[AS]定義されてないと思われる変数があるときは、親クラスを追ってみる。
PV3Dのクラスを読んでたらよくわからない書き方があったので、テストしてみた。
たとえばこんなドキュメントクラスがあった場合に、
package { import flash.display.Sprite; /** * ... * @author 393 */ public class Test extends Test2 { public function Test() { trace(spriteObj.getRect(this)) //出力(x=0, y=0, w=100, h=100) } public function get spriteObj():Sprite{ return sp; } } }
このコンストラクタでは、spriteObjというものに対して、getRectメソッドを実行させている。
だけども、どこにも var spriteObj という記述は無い。
でも下を見ると、getterでspriteObj というものが定義されている。
これで、spriteObj というものは使えることができるということらしい。
で、getterの中をみると、spを返すことになっている。
これまた、var spという記述はどこにもない。
じゃあ、どこを探すかといえば、Testクラスが継承している、Test2クラスを探してみる。
Test2クラスはこんな感じ。
package { import flash.display.Sprite; /** * ... * @author 393 */ public class Test2 extends Sprite { protected var sp:Sprite; public function Test2() { sp = new Sprite(); sp.graphics.drawRect(0,0,100,100) } } }
ここでspが定義されてるのがわかる。
さらに、protectedで定義されているので、Testクラスからでもアクセスできることがわかる。
(privateだとアクセスできないね)
で、spはSpriteクラスなので、getRect()メソッドが使えるとういわけだ。
ポイントはgetterの場合は、var spriteObj で定義してなくてもOKってことかしら。
Tweet