📜  Underscore.JS-更新对象(1)

📅  最后修改于: 2023-12-03 15:35:28.266000             🧑  作者: Mango

Underscore.JS-更新对象

Underscore.js是一个常用的JavaScript工具库,提供了许多实用的函数和工具来简化操作,其中包括了更新对象的函数。

1. _.extend

_.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}

解释:上述代码首先定义了两个对象 obj1obj2obj1 中有属性 abobj2 中有属性 bc。然后将 obj2 合并到 obj1 中(也可以合并多个对象),结果存放在 result 中,此时 obj1 中的 b 属性被覆盖成了 3,合并后得到的新对象 {a: 1, b: 3, c: 4}

2. _.defaults

_.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}

解释:上述代码首先定义了两个对象 obj1obj2obj1 中有属性 abobj2 中有属性 bc。然后将 obj2 的属性合并到 obj1 中,如果 obj1 中已有某个属性,则不会被覆盖,结果存放在 result 中,此时 obj1 中的 b 属性仍为 2,合并后得到的新对象 {a: 1, b: 2, c: 4}

3. _.clone

_.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,它有属性 ab,其中 b 又是一个对象。然后使用 _.clone 函数复制了 obj1,得到了 obj2。此时可以看出,obj1obj2 的引用地址不同,它们完全独立,obj1.bobj2.b 也指向不同的内存位置,它们之间没有相互影响。

总结

Underscore.js 提供了 _.extend_.defaults_.clone 三个函数,分别可以用来更新和合并对象、保留默认属性和深度复制对象。学会使用这些函数可以大大简化 JavaScript 编程,提高自己的工作效率。