ここでは、Object.create()
の仕組みを理解するための簡単なコードを用意しています。ここでは、プロトタイプとして使用される共通オブジェクトがprototypeObj
です。 newObj
は、プロトタイプがprototypeObj
に設定されたオブジェクトです。ここで私はanotherObj
と呼ばれるプロパティを持つsession
と呼ばれる別のオブジェクトがあり、anotherObj
はnewObj
と同じプロトタイプを持っています。しかし、プロトタイプanotherObj
にあるfooというプロパティに新しい値を追加すると、newObj
にも影響します。なぜ私はこの行動を経験していますか?javacriptの関数引数としてオブジェクト参照を渡す
コード:
var prototypeObj = {
foo: [],
addItemToFoo: function(add) {
this.foo.push(add);
}
}
function create(fooVal) {
var myProto = Object.create(prototypeObj);
myProto.foo = fooVal;
return myProto;
}
var newObj = create([1, 2]); // initialized with [1,2]
session = {
anotherObj: create(newObj.foo) // initialized with [1,2]
}
session.anotherObj.addItemToFoo(6); // pushed 6 to session.anotherObj.foo
console.log("newObj.foo is " + newObj.foo); // newObj also get 6 pushed to its foo property
console.log("anotherObj.foo is " + session.anotherObj.foo);
@ AL-zamiはどうなっていますか? – zurfyx
これは今分かっています... :) –
@ AL-zami great :)これは、例えば整数や文字列では起こり得ないことに注意してください。しかし、 '{something:1}'のような他のオブジェクトでも起こります。 – zurfyx