Object.assign剖析:
方法含义:
浅层次的完成对象的拷贝工作,拷贝源对象的第一层属性和第一层引用
方法使用
Object(目标对象,源对象1,源对象2,…)
方法原理
步骤:1.判断对象是否存在assign方法,没有就直接赋值给对象一个assign方法
2.判断目标源对象是否为空,为空则抛出错误,程序完毕
3.遍历源对象,拿出可枚举属性赋值给新对象
4.返回新对象
代码实现
if (typeof Object.assign !== 'function') {
(function () {
Object.assign = function (target, ...rest) {
let target = {}
if (target == undefined || target == null) {
throw new Error('目标对象不可以为空', target)
}
rest.forEach((ele) => {
for (let key in ele) {
if (Object.hasOwnProperty(ele, key)) {
target[key] = ele[key] // 遍历可枚举属性
}
}
})return target
}
})()
}
扩展部分
可枚举属性:能够被for in ,Object.getOwnDescriptor, Object.getOwnDescriptors,Object.key能够遍历,循环出的属性,可以通过描述符中的enumerable设置为true进行配置.
Assign:只能进行浅拷贝,只能拷贝第一层的属性和引用。拷贝的引用会跟着目标地址的改变而改变
深拷贝:通过创建不同的内存地址环境形成引用转而形成新的对象
深拷贝的实现方法:
- 通过JSON形成 JSON.parse(JSON.Stringyfy(obj))
缺点:无法深层次复制关于有关操作符描述后的属性,比如设置了get,set的属性,只能序列化第一次的值,但是get函数消失
- 通过Object.defineProperties,Object.getOwnPropertyDescriptors,实现深度拷贝
Object.assign剖析与深拷贝

1072

被折叠的 条评论
为什么被折叠?



