0

我是 jQuery 新手,我想了解 jQuery 中的 $.extend() 函数。

谁能解释以下陈述之间的区别?

$.extend(true,ob1,ob2);

$.extend(true,{},ob1,ob2);

$.extend(true,ob1,{},ob2);

$.extend(true,ob1,ob2,{});

谢谢,

阿南德

4

2 回答 2

3

最好用一个样本来解释

var firstObject = {
    "hello": "jonkers",
};
var secondObject = {
    "stradivarius": "bonkers"
};
console.log(firstObject);
>> Object {hello: "jonkers"} 
$.extend(firstObject, secondObject);
console.log(firstObject);
>> Object {hello: "jonkers", stradivarius: "bonkers"}

但是这true部分是什么意思?这是一个布尔值,告诉$.extend函数应该进行深层复制

深拷贝,你说!

当涉及适用于多种语言的对象时,有两种不同类型的“复制”,而不仅仅是 JavaScriptshallowdeep. 浅拷贝是指您只需引用该对象(及其包含的所有内容)并进行复制,导致更改的值copy_object反映在original_object. 深层副本是一个真正的品牌新对象,您可以通过三种方式操作到星期天,而不会影响original_object.

您想知道的最后一个示例是完全相同的调用,只是它需要更多的对象才能放入您的第一个对象。所以api调用将是

$.extend(true, firstObject, secondObject, third, fourth, n-objects);

可以阅读更多关于此的内容

http://api.jquery.com/jQuery.extend/

http://blog.imaginea.com/deep-copy-in-javascript/

于 2013-06-27T06:03:51.363 回答
2

让我们从extend函数的定义开始:

When two or more object arguments are supplied to$.extend(), properties from all of the objects are added to the target object. Arguments that are null or undefined are ignored.

现在让我们看看您的示例代码:

1. $.extend(true,ob1,ob2);

目标是 ob1,这个将添加 ob2 参数到它的参数中。

2. $.extend(true,{},ob1,ob2);

目标是一个新对象(使用 {} 定义)。这个新对象将具有来自两个对象(ob1 和 ob2)的参数。

3. $.extend(true,ob1,{},ob2);

目标是 ob1,它将添加来自新对象(它没有意义)和对象 ob2 的参数。它是否适用于新的对象参数?

4. $.extend(true,ob1,ob2,{});

目标是 ob1,它将添加来自对象 ob2 和新对象的参数(它也没有意义)。它是否适用于新的对象参数?

于 2013-06-27T06:02:26.233 回答