如果MyObj中是一個JavaScript對象,將將this.myObj = myObj存儲引用或複製/快照?
this.myObj = myObj
創造的是什麼物體看起來像此刻拷貝/快照,或將其存儲到實際對象的引用?
我有什麼似乎是同一個對象,這就是爲什麼我開始懷疑我是不是在事實上維護副本時,我不想的雙套麻煩......
如果MyObj中是一個JavaScript對象,將將this.myObj = myObj存儲引用或複製/快照?
this.myObj = myObj
創造的是什麼物體看起來像此刻拷貝/快照,或將其存儲到實際對象的引用?
我有什麼似乎是同一個對象,這就是爲什麼我開始懷疑我是不是在事實上維護副本時,我不想的雙套麻煩......
一基準,可以肯定的:
var foo = function() {};
var foo_instance = new foo();
var bar = {
foo: foo_instance
};
console.log(foo_instance === bar.foo); // true
如果要克隆的對象,你有兩個選擇:
的jQuery:
var foo = function() {};
var foo_instance = new foo();
var foo_instance_clone = new foo();
$.extend(foo_instance_clone, foo_instance);
純JavaScript:
var foo = function() {};
var foo_instance = new foo();
var foo_instance_clone = new foo();
for (var key in foo_instance) {
if (foo_instance.hasOwnProperty(key)) {
foo_instance_clone[key] = foo_instance;
}
}
它是對對象的引用。有一個對象有兩種「尋址」方式。
function Cls(obj) {
this.myObj = obj;
}
var foo = { bar : 1 }
var x = new Cls(foo);
foo.bar = 2;
console.log(x.myObj) // { bar : 2 }
您只是分配一個對象的引用。畢竟,您只能在ECMAscript中處理參考文獻。沒有像你可以在內存中處理或克隆它的「實際對象」這樣的事情。那麼你可以克隆它,但是這隻會在HEAP上創建另一個對象,你會得到一個參考到。
認爲它是這樣的...
var newObj = { };
現在發生的事情是,新的目標是形成/在堆上創建的地方,你必須在你的newObj
變量,一個參考。當我們像
newObj.foo = newObj
我們只是引用同一個對象,在HEAP的某處。沒有魔法。
應該很容易測試 - > http://jsfiddle.net/6cBKp/ – adeneo