我了解使用 jquery 扩展的优点,但是遵循两种完全相似的情况,或者一种比另一种更好,为什么?
obj1 = $.extend(true, {}, elements);
..
obj1 = elements;
更新: 答案说明:以下应该可以消除混淆
obj = {"value":4};
obj_test = obj;
obj.value = 5
alert(obj_test.value);
</p>
我了解使用 jquery 扩展的优点,但是遵循两种完全相似的情况,或者一种比另一种更好,为什么?
obj1 = $.extend(true, {}, elements);
..
obj1 = elements;
更新: 答案说明:以下应该可以消除混淆
obj = {"value":4};
obj_test = obj;
obj.value = 5
alert(obj_test.value);
</p>
在第二种情况下,您不会“复制”对象,而是创建对它的第二个引用。
所以在第一种情况下,它是一个副本 - 2 个对象存储在 2 个变量中。
在第二个 - 由 2 个变量(不是副本)引用的单个对象。
第一种方法用于deep copy an Object
。
var elements = {
name : 'John',
age : 23
}
var obj1 = $.extend(true, {}, elements);
obj1.name = 'Bill';
console.log('Original : '+ elements.name);
console.log('Deep Copy : ' + obj1.name);
其次是copying over the reference
对象。
var obj2 = elements;
console.log('Original : '+ elements.name);
console.log('Reference Copy : ' + obj2.name);
在第一种情况下,两个对象都指向不同的内存位置。因此更改属性只会影响已更改的对象。
在第二种情况下,两者都指向相同的内存位置。因此,对 1 的影响将对另一个产生间歇性影响。