将所有可枚举的属性和符号属性的值从一个或多个源对象深度复制到目标对象。它将返回目标对象。使用TypeScript编写。
使用npm:
$ npm i deeplyassign
使用yarn:
$ yarn add deeplyassign
你可以使用任何模块导入导出方式来使用,这取决于你的环境配置,示例如下:
//const deeplyAssign = require("deeplyassign").default
import deeplyAssign from 'deeplyassign';
const source1 = {
info: {
author: 'Tommy',
from: 'China'
},
finish: false,
other: 'follow'
}
const source2 = {
info: {
author: 'moZLeo',
sex: 'male'
},
finish: true,
log: console.log
}
console.log(deeplyAssign({}, source1, source2))
// {
// info: { author: 'moZLeo', from: 'China', sex: 'male' },
// finish: true,
// other: 'follow',
// log: console.log
// }
- 此与Object.assign()具有几乎相同的行为,并且以递归的方式做深度克隆。
-
当target与source相对应属性值类型不一致时,采用source对象属性的值类型。这代表原target的属性的值会被放弃或覆盖。例如:
const target = { prop: { org: 'xxx' } }; // type of target.prop => 'object' const source = { prop: [ 0, 1 ] }; // type of source.prop => 'array' console.log(deeplyAssign(target, source)) // { prop: [ 0, 1 ] }
-
- 没有直接的对象引用并且不会修改中间变量(参考test)
- 适用于一层循环♻️引用对象。
- 当一个target的一个属性值为函数时,采用引用进行克隆并会保留附加属性(所以对其修改会影响原对象)。
- String类型和Symbol类型的属性都会被拷贝(IE浏览器由于不兼容Symbol类型所以自动忽略此类型属性)。
MIT © Tommy White