[JavaScript] prototypeを変更する意味
すべての関数にあるprototypeオブジェクトを利用すると、オブジェクト指向的なことができる。
prototypeに入れる変数・関数を変更すると、すべてのインスタンスに適用される。
[javascript]
function Sample() {
//…
}
var firstInstance = new Sample;
var secondInstance = new Sample;
Sample.prototype.num = 1;
alert(firstInstance.num);
alert(secondInstance.num);
// 1, 1
[/javascript]
【@要注意】 prototypeにすでにあるメンバ・メソッドの中身を変更すると、すべてのインスタンスのそれが変更される。
[javascript]
function Sample() {
//…
}
Sample.prototype.num = 1;
var firstInstance = new Sample;
firstInstance.num = 2;
var secondInstance = new Sample;
secondInstance.num = 3;
Sample.prototype.num = 4;
alert(firstInstance.num);
alert(secondInstance.num);
// 4, 4
[/javascript]
ユーザー定義の関数だけでなく、標準機能のオブジェクトのprototypeも変更可能。
[javascript]
var arr = [1, 2, 3];
Array.prototype.push = function (val) {
this.unshift(val);
}
arr.push(100);
alert(arr);
// 100, 1, 2, 3
[/javascript]
この場合、prototypeが変更されるだけでなく、すでに生成されているすべてのArrayオブジェクトのインスタンスの値/オブジェクトもも変更される。
非常に柔軟性が高いが、それゆえのリスクも高いので使う場面に気をつけよう。