C4 - Item 32 永远不要修改__proto__

译文

特别的__proto__属性提供了Object.getPrototypeOf方法所没有的额外功能:修改对象的原型链。虽然看似无害,但是这个隐形的功能是必须要避免使用的。一个非常明显的原因就是:当你要通过这种方式修改原型链的时候,这种方式却不被支持。

另外的原因还有性能关系。所有的现在JavaScript引擎都对设置和获取对象属性进行了着重的优化,因为这属于是最常用的一些操作。这些优化完全基于引擎对对象结构的认知。当改变了对象的内部结构之后,在对象本身以及其原型链上添加和删除属性时,这些优化都将是无效的。修改对象本身的继承结构是极具破坏性的。

但是避免修改__proto__最重要的原因是要维护我们可以预测的行为。对象的原型链通过其属性和属性的值来定义行为。修改对象的原型链就像是给它做了一个大脑移植手术:交换了整个继承关系的层级。可能在某些例外情况下,这样的做法是有帮助的,但是最为明智的选择还是需要保证继承层级的稳定性。

想要为对象自定义原型链,可以使用ES5当中的Object.create方法。


Things to remember

  1. 永远不要修改__proto__属性。
  2. 使用Object.create方法实现继承。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值