Effective JavaScript Item 32 绝不要改动__proto__

本系列作为Effective JavaScript的读书笔记。

 

Object.getPrototypeOf相比。__proto__的特殊之处还体如今它可以改动一个对象的原型继承链。由于它是一个属性,除了运行获取它的操作外。还可以对它进行设置。

 

可是。绝不要改动__proto__。原因例如以下:

 

首先。最显而易见的原因就是便携性。由于不是全部的JavaScript执行环境都支持这一属性,所以使用了__proto__之后,代码就不能在那些不支持__proto__的环境中执行了。

 

其次。是性能上的考虑。如今的JavaScript引擎的实现都会针对对象属性的存取作出大量的优化。由于这些操作是最经常使用的。

当改动了对象的__proto__后。就相当于改动了对象的整个继承结构。这样做回导致非常多优化都不再可用。

 

最后,最重要的原因是须要保证程序的可靠性。由于改变__proto__属性后。对象的原型继承链或许会被全然地改变。

当程序中有其它代码依赖于原来的继承链时。就会出现不可意料的错误。通常而言,原型继承链须要保持稳定。

 

当须要为一个新创建的对象赋予一个原型对象时,能够使用ES5提供的Object.create方法。对于未实现ES5标准的环境,能够參考Item 33,它给出来一个不依赖于__proto__Object.create方法的实现。

 

总结:

  1. 绝不要改动对象的__proto__属性。
  2. 当须要为新建对象提供一个原型对象时,能够考虑使用Object.create
posted @ 2017-04-21 20:27  jzdwajue  阅读(79)  评论(0编辑  收藏  举报