[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