JavaScript寄生组合继承中new一个临时构造函数的原因详解

本文探讨了在不使用中间变量的情况下,原型链共享导致的属性变化现象。通过实例解析了当一个对象的原型指向另一个对象的原型时,属性修改如何影响原型链上的其他对象。同时,介绍了使用中间对象时,原型链的实例化机制及其与共享属性的区别。

如果不用中间变量,因为B.prototype = A.prototype,所以打印出来的A.prototype.name为B,因为都指向了同一个原型,所以当后来的B修改了name,A.prototype.name也就是"B",这是可以理解的:

令B.prototype = A.prototype

如果用了中间对象x,x就会继承A,那其实也是B.prototype继承A.prototype的一个实例,而不是像上面的共享:

原理可以从下面的基础例子中看到,A把在原型链上的name="a"共享出去,A的实例k1就得到了共享的name,如果给k1.name设置值b, k1.name的值就从a变成b,但不会修改k1的__proto__指针指向的A原型对象的name值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值