1

我了解使用 jquery 扩展的优点,但是遵循两种完全相似的情况,或者一种比另一种更好,为什么?

obj1 = $.extend(true, {}, elements);

..

obj1 = elements;

更新: 答案说明:以下应该可以消除混淆

​obj = {"value":4};
obj_test = obj;
obj.value = 5
alert(obj_test.value);

​</p>

4

2 回答 2

2

在第二种情况下,您不会“复制”对象,而是创建对它的第二个引用。

所以在第一种情况下,它是一个副本 - 2 个对象存储在 2 个变量中。

在第二个 - 由 2 个变量(不是副本)引用的单个对象。

于 2012-11-28T23:51:20.860 回答
0

第一种方法用于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 的影响将对另一个产生间歇性影响。

于 2012-11-28T23:55:11.397 回答