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);
}
}
}
関連
最終更新:2013年07月28日 21:30