JavaScriptの継承について
4月 27
今までJavaScriptの継承はネットで拾い読みしたコードを参考に書いてきたので,きちんとまとめたくなった。
勉強に使ったのは下記の書籍。
これまで自己流で書いてきた私にとっては非常にいい本である。
この書籍では関数をクラスのように書く”関数パターン”は”クラシカル”と表現されていた。
また,”プロトタイプパターン”もあり,こちらは”モダン”と呼ばれていた。
これまでの人生でJavaやC++でクラスというものが染み付いてしまっているので,まずは”関数パターン”の方を調べみた。
(クラシカルという表現は気になるけれど。。。)
具体的には下記の形式になる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/** * 継承用の関数を即時関数かつクロージャで作成。 * クロージャで作成するのは空の関数Fのオブジェクトを毎回作らないため。 */ var inherit = (function() { // 空のプロキシオブジェクトを作成 var F = function() {}; return function (C, P) { F.prototype = P.prototype; C.prototype = new F(); // スーパークラスを格納 // (親の参照を持っていたほうが便利らしい) C.uber = P.prototype; // コンストラクタを指定 // (再設定しないと,CのコンストラクタはPと報告されるらしい) C.prototype.constructor = C; } }()); /** * スーパークラス的なコンストラクタ関数 */ function Parent(name) { this.name = name; } Parent.prototype.say = function { return this.name; }; /** * サブクラス的なコンストラクタ関数 */ fucntion Child(name){ // スーパークラスのコンストラクタ関数を呼び出す。 Parent.apply(this, arguments); } inherit(Child, Parent); |
一般的に”継承よりもコンポジション”と言われ,使用する機会が少ないかもしれないが,
オブジェクトのプロトタイププロパティを理解するのにもいい教材だった。
最近のコメント