WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート 2010年05月

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

ちょっとハマったので書いておきます。
次のコードを見てください


var Test = function(){}

Test.prototype = {
prop : []
}

var test1 = new Test();
var test2 = new Test();

test1.prop.push(123);
console.info(test2.prop);
さて問題です!最後のconsole.info(test2.prop);は何が出力されるでしょう。私は当然
[]
と空の配列だと思いました。ところが、これは[123]が出力されます。代入ではなく、初期化してしまっているのが問題です。prototype内の変数は代入時に複製され、それまでは参照しているようです。これを期待通りに動かすには

var Test = function(){
this._init();
}

Test.prototype = {
prop : null,
_init:function(){
this.prop = [];
}
}

var test1 = new Test();
var test2 = new Test();

test1.prop.push(123);
console.info(test2.prop);
このようにコンストラクタ(的なもの)で代入してやる必要があります。

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。