📅  最后修改于: 2023-12-03 15:35:28.266000             🧑  作者: Mango
Underscore.js是一个常用的JavaScript工具库,提供了许多实用的函数和工具来简化操作,其中包括了更新对象的函数。
_.extend
函数可以将一个或多个源对象的属性合并到目标对象中,如果目标对象中有同名的属性则会被覆盖。
示例代码:
var obj1 = {a: 1, b: 2};
var obj2 = {b: 3, c: 4};
var result = _.extend(obj1, obj2);
console.log(result); // {a: 1, b: 3, c: 4}
console.log(obj1); // {a: 1, b: 3, c: 4}
console.log(obj2); // {b: 3, c: 4}
解释:上述代码首先定义了两个对象 obj1
和 obj2
,obj1
中有属性 a
和 b
,obj2
中有属性 b
和 c
。然后将 obj2
合并到 obj1
中(也可以合并多个对象),结果存放在 result
中,此时 obj1
中的 b
属性被覆盖成了 3
,合并后得到的新对象 {a: 1, b: 3, c: 4}
。
_.defaults
函数可以将一个或多个默认对象的属性合并到目标对象中,如果目标对象中有同名的属性则不会被覆盖。
示例代码:
var obj1 = {a: 1, b: 2};
var obj2 = {b: 3, c: 4};
var result = _.defaults(obj1, obj2);
console.log(result); // {a: 1, b: 2, c: 4}
console.log(obj1); // {a: 1, b: 2, c: 4}
console.log(obj2); // {b: 3, c: 4}
解释:上述代码首先定义了两个对象 obj1
和 obj2
,obj1
中有属性 a
和 b
,obj2
中有属性 b
和 c
。然后将 obj2
的属性合并到 obj1
中,如果 obj1
中已有某个属性,则不会被覆盖,结果存放在 result
中,此时 obj1
中的 b
属性仍为 2
,合并后得到的新对象 {a: 1, b: 2, c: 4}
。
_.clone
函数可以深度复制一个对象或一个数组,所有的属性和元素都会被复制一份。
示例代码:
var obj1 = {a: 1, b: {c: 2}};
var obj2 = _.clone(obj1);
console.log(obj1); // {a: 1, b: {c: 2}}
console.log(obj2); // {a: 1, b: {c: 2}}
console.log(obj1 === obj2); // false
console.log(obj1.b === obj2.b); // false
解释:上述代码首先定义了一个对象 obj1
,它有属性 a
和 b
,其中 b
又是一个对象。然后使用 _.clone
函数复制了 obj1
,得到了 obj2
。此时可以看出,obj1
和 obj2
的引用地址不同,它们完全独立,obj1.b
和 obj2.b
也指向不同的内存位置,它们之间没有相互影响。
Underscore.js 提供了 _.extend
、_.defaults
和 _.clone
三个函数,分别可以用来更新和合并对象、保留默认属性和深度复制对象。学会使用这些函数可以大大简化 JavaScript 编程,提高自己的工作效率。