プロトタイプ - JavaScriptの個人的なメモ (その4)
このメモについて
他の言語とJavaScriptの違いに関する個人的なメモですので、誤りがあるかもしれません。見つけたらご指摘ください。
前回のメモ
thisの遅延束縛 - JavaScriptの個人的なメモ (その3)
プロトタイプ
JavaScriptのプロトタイプは、単純なので誰でも簡単にできます。
createメソッド
このメモでは、前もって、プロトタイプの設定処理をまとめておいたcreateメソッドを作っておき、関数用のメソッドとして使うこととします。
/*コンストラクタ関数用のメソッド*/ Function.prototype.create = function(o) { this.prototype = o || {}; return new this(); };
続けて、このcreateメソッドを使って、オブジェクトa、bとcの三つを作ってみましょう。bはaを継承させ、cはbを継承させます。
var A = function() { var that = this, n = 0; that.hoge = function() { n++; return n; }; }, B = function(){ }, /*それぞれプロトタイプを設定してオブジェクトを作成*/ a = A.create(), b = B.create(a), c = B.create(b); a.hoge(); /* 1 を返す*/ b.hoge(); /* 2 を返す*/ c.hoge(); /* 3 を返す*/
aのhogeメソッドを、bとcの二つのオブジェクトに継承させることができました。この点は、クラスベースのオブジェクト指向のような継承に思えるかもしれません。
しかし、これら二つのbとcは、クラスや関数Aではなく、オブジェクトaそのものを継承しているのです。
結論
- プロトタイプはオブジェクトを直接、継承できるので、単純でかんたんです
- クラスや関数ではなく、オブジェクトがひな型となります