Object.assign()必会易混点以及原型重定向中使用Object.assign()

博客围绕Object.assign()展开,介绍其比较对象时的替换规则,指出它是浅比较。还探讨了在原型重定向中使用该方法的问题,如重定向后Fn.prototype缺少constructor,原有的x、y丢失,给出手动添加constructor的解决办法,并提出获取相同地址的疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Object.assign()知识点

先看一个案例,当比较两个对象的时候,是用第二个obj2 去替换obj1 的内容
在这里插入图片描述

当比较三个对象的时候,输出的是{}里面的内容
在这里插入图片描述
Object.assign()浅比较

let obj1 = {
    x: 100,
    y: 300,
    n: {
        name: 'Lily',
        gender: 'female'
    }
}
let obj2 = {
    z: 800,
    y: 600,
    n: {
        hobby: 'reading',
        flower: 'lily'
    }
}
let obj = Object.assign({}, obj1, obj2)
console.log(obj);
console.log(obj1 == obj);

在这里插入图片描述
结果如上,直接用obj2.n的内容全部替换,而不是比较n里面的内容。

原型重定向中使用Object.assign()

在这里插入图片描述
如果直接重定向,Fn的prototype缺少consrtuctor,同时Fn的prototype上原来的x,y也丢失了。

如果用Object.assign(),得到的Fn.prototype缺少consrtuctor,因为内置的Fn.prototype里面的consrtuctor是不可枚举的,合并后不能赋给新的对象。解决办法是给proto手动加一个constructor。

在这里插入图片描述
在这里插入图片描述
这样得到的Fn.prototype有了constructor,但是地址和之前的不一样。如果要得到和之前一样的地址的Fn.prototype应该怎么做呢?
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值