C4 - Item 32 永远不要修改__proto__
2017-07-12 20:43
239 查看
译文
特别的__proto__属性提供了Object.getPrototypeOf方法所没有的额外功能:修改对象的原型链。虽然看似无害,但是这个隐形的功能是必须要避免使用的。一个非常明显的原因就是:当你要通过这种方式修改原型链的时候,这种方式却不被支持。另外的原因还有性能关系。所有的现在JavaScript引擎都对设置和获取对象属性进行了着重的优化,因为这属于是最常用的一些操作。这些优化完全基于引擎对对象结构的认知。当改变了对象的内部结构之后,在对象本身以及其原型链上添加和删除属性时,这些优化都将是无效的。修改对象本身的继承结构是极具破坏性的。
但是避免修改__proto__最重要的原因是要维护我们可以预测的行为。对象的原型链通过其属性和属性的值来定义行为。修改对象的原型链就像是给它做了一个大脑移植手术:交换了整个继承关系的层级。可能在某些例外情况下,这样的做法是有帮助的,但是最为明智的选择还是需要保证继承层级的稳定性。
想要为对象自定义原型链,可以使用ES5当中的Object.create方法。
Things to remember
永远不要修改__proto__属性。使用Object.create方法实现继承。
相关文章推荐
- Effective JavaScript Item 32 绝不要修改__proto__
- Effective JavaScript Item 23 永远不要修改arguments对象
- 在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
- 永远不要修改arguments对象
- 修改bug时,尤其是别人的代码,永远不要钻牛角尖。应该利用debug,找到问题根源的突破口。
- 移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组
- C4 - Item 31 倾向于使用Object.getPrototypeOf而不是__proto__
- 在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
- 读书笔记 effective c++ Item 36 永远不要重新定义继承而来的非虚函数
- 在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
- [Effective JavaScript 笔记]第23条:永远不要修改arguments对象
- 读书笔记 effective c++ Item 37 永远不要重新定义继承而来的函数默认参数值
- [Effective JavaScript 笔记]第32条:始终不要修改__proto__属性
- cygwin的在线安装最快的镜像,http://mirrors.163.com/cygwin/,注意路劲不要修改不用手动的去输入64位还是32为的
- 在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
- 【转】永远不要跟父母说的十句话
- Item 9:在析构/构造时不要调用虚函数 Effective C++笔记
- 三种东西永远不要放到数据库里
- 永远不要在生气的时候做出重要决定
- 三种东西永远不要放到数据库里