码迷,mamicode.com
首页 > 编程语言 > 详细

Effective JavaScript Item 32 绝不要修改__proto__

时间:2014-09-30 12:28:59      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:读书笔记   javascript   prototype   

本系列作为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

Effective JavaScript Item 32 绝不要修改__proto__

标签:读书笔记   javascript   prototype   

原文地址:http://blog.csdn.net/dm_vincent/article/details/39692899

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!