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