Arctic.jsのクラス継承の挙動が分からなかったのでメモ
JavaScriptはprototypeベースのクラス継承なんだけど、
Arctic.js とか enchant.js ではJavaのように
クラスベースのクラスが用意されてます。
Arctic.jsのコンストラクタの挙動が分かってなかったので簡単メモ。
これはスプライトを継承したクラスを作っています。
var Player = arc.Class.create(arc.display.Sprite, { initialize:function(name){ console.log(name); } });
これをnewしたときにスーパークラスのコンストラクタは呼ばれるか?
これは Yes.
継承先のコンストラクタは呼ばれるか?
これも Yes.
nameには何が入っているのか?
これは new したときの引数がそのままnameに入っている。
なんで勝手にスーパークラスのコンストラクタが呼ばれるんだと、
分からなくなっていました。
じゃあスーパークラスをどうやって制御するかというと
Arctic.js には $super という引数があるそうです。
$superを使ったクラス継承を作ります。
var Player = arc.Class.create(arc.display.Sprite, { initialize:function($super, name){ console.log(name); } });
スーパークラスのコンストラクタは呼ばれるか?
これは No. 引数に$superを取ると呼ばれなくなるようです。
nameには何が入っているのか?
これも new したときの引数がそのままnameに入っている。
$superには何が入っているのか?
スーパークラスの関数を呼び出す関数が入っている。
$superの使い方はこうです。
var Player = arc.Class.create(arc.display.Sprite, { initialize:function($super, name){ $super(name) console.log(name); } });
これは$superを省略した時と同じ動作になります。
nameには何が入っているのか?
これも new したときの引数がそのままnameに入っている。