我是Node.js的新手,但已经对JavaScript及其原型生态系统进行了相当深入的了解。我通常听到的是Object.setPrototypeOf()
或为对象的__proto__
属性分配新值是不好的。
这些[[Prototype]]
突变会导致性能问题,并导致代码优化程度降低。现在,当我试图以某种方式围绕这个想法思考时,我看到 Node.js 中的util.inherits()
方法使用Object.setPrototypeOf()
来设置第一个 arg 的原型。源代码可以在lib/util.js找到。
如果Object.setPrototypeOf()
真的那么糟糕,那么 Node.js 使用它来配置给定对象的原型的原因是什么?
而且,如果我在给定脚本的开头调用它,并且注意永远不要在运行时调用它,Object.setPrototypeOf()
是否仍然具有破坏性?
就像setPrototypeOf
因为你给出的原因而气馁一样,util.inherits
也是如此 - 出于同样的原因。引自文档:
不鼓励使用
util.inherits()
。请使用 ES6class
和extends
关键字来获取语言级别的继承支持。另请注意,这两种样式在语义上是不兼容的。
这也建议你应该做些什么来避免setPrototypeOf
和util.inherits
。
MDN 添加了以下建议:
如果您担心性能,则应避免设置对象的
[[Prototype]]
。相反,请使用Object.create()
创建一个具有所需[[Prototype]]
的新对象。