トップページ > コンテンツ > プログラミング入門 > Ajax入門 > JavaScript入門 > prototype継承

javascriptではjavaと違い、後付けでクラスにメソッドとかを追加できたりするのだが、
その場合そのインスタンスでしか利用できない。
var a = new ClassA();
a.z = 10; //<-インスタンスbを通じては参照されない。
var b = new ClassA();
alert(b.z);
しかし、ClassA.prototype.変数/関数などに直接代入すると、すべてのインスタンスで参照されるようになる。
尚、後付けで追加されたものではなく、元々クラスに存在するプロパティについてはhasOwnPropertyで確認できる。

以上の動作については、下記の実装を試してみることで確認できる。
function test1(){
    this.a = 1;
    this.b = function(){alert('test');}
}
   
function test() {
    var sample = new test1();
    test1.prototype.c =function(){alert('test2');}; //他インスタンスから参照可能(var sample2 = new test1(); sample2.c();ができる)
    sample.d = function(){alert('test3');} //他インスタンスから参照不可(var sample2 = new test1(); sample2.d();ができない。sample.d();は可能)
                                           //尚、プロトタイプでも同じ変数が指定された場合は、オブジェクトの変数が優先される。

    //prototypeから元からあったものだけ調べるにはhasOwnPropertyを使う。この場合、abが表示される。
    for (var key in sample) {
        if(sample.hasOwnProperty(key)) {
              document.write(key);
        }
    }
}

関連

参考:
http://www.slideshare.net/yuka2py/javascript-23768378(68ページ以降のprotoypeと__proto__が分かりやすい。)

最終更新:2013年07月28日 21:30