我是 jQuery 新手,我想了解 jQuery 中的 $.extend() 函数。
谁能解释以下陈述之间的区别?
$.extend(true,ob1,ob2);
$.extend(true,{},ob1,ob2);
$.extend(true,ob1,{},ob2);
$.extend(true,ob1,ob2,{});
谢谢,
阿南德
我是 jQuery 新手,我想了解 jQuery 中的 $.extend() 函数。
谁能解释以下陈述之间的区别?
$.extend(true,ob1,ob2);
$.extend(true,{},ob1,ob2);
$.extend(true,ob1,{},ob2);
$.extend(true,ob1,ob2,{});
谢谢,
阿南德
最好用一个样本来解释
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
函数应该进行深层复制。
深拷贝,你说!
当涉及适用于多种语言的对象时,有两种不同类型的“复制”,而不仅仅是 JavaScriptshallow
和deep
. 浅拷贝是指您只需引用该对象(及其包含的所有内容)并进行复制,导致更改的值copy_object
反映在original_object
. 深层副本是一个真正的品牌新对象,您可以通过三种方式操作到星期天,而不会影响original_object
.
您想知道的最后一个示例是完全相同的调用,只是它需要更多的对象才能放入您的第一个对象。所以api调用将是
$.extend(true, firstObject, secondObject, third, fourth, n-objects);
可以阅读更多关于此的内容
让我们从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 和新对象的参数(它也没有意义)。它是否适用于新的对象参数?