dojo.declare()
を使用すると、他のクラスを継承して、新しいクラスを作成することも可能だ。継承を行うためには、dojo.declare()
の第2引数にクラスを指定すればよい。
たとえば、Human
を継承してSuperMan
を作る場合は以下のようにすればよい。
dojo.declare("SuperMan", Human, {...});
さらに、Dojoは多重継承もサポートしている。複数のクラスを親クラスに持ちたい場合は、第2引数にクラスの配列を指定する。
dojo.declare("CatMan", [Human, Cat], {...});
たったこれだけで、親クラスのすべての属性とメソッドを引き継いだ、新しいクラスが作成される。あとは、継承に関係する細かいルールを見ていこう。
親クラスのコンストラクタは自動で呼び出される
親クラスのコンストラクタは、明示的な呼び出しを行わなくとも自動的に呼び出される。
親クラスのメソッドを使用する場合は、`this.inherited()`を用いる
親クラスのメソッドを呼び出したい場合は、すべてのクラスが持っている「inherited()
」というメソッドを呼び出せばよい。inherited()
の呼び出し方は、用途に応じて複数用意されている。
まず、オーバーライドしたメソッド内から、親クラスが持つ同名のメソッドを呼び出す場合は、引数を1つだけ指定する。
override_func: function() {
...(略)...
// 親クラスが持つ、同名のメソッドを呼び出し
this.inherited(arguments);
}
親クラスが持つメソッドを、名前を指定して呼び出すには、第1引数にメソッド名を指定する。
override_func: function() {
...(略)...
// 親クラスが持つ、メソッド「someFunc」を呼び出し
this.inherited("someFunc", arguments);
}
さらに、引数を追加して親クラスのメソッドを呼び出すこともできる。追加の引数は、引数リストの最後に配列で指定する。
// オーバーライドした同名のメソッドを追加の引数とともに呼び出す
this.inherited(arguments, ["added", "arguments"]);
// 親クラスが持つメソッド「someFunc」を、追加の引数とともに呼び出す
this.inherited("someFunc", arguments, ["added", "arguments"]);