为什么 Node.js 中的 util.inherits() 方法使用 Object.setPrototypeOf()?



我是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()。请使用 ES6classextends关键字来获取语言级别的继承支持。另请注意,这两种样式在语义上是不兼容的。

这也建议你应该做些什么来避免setPrototypeOfutil.inherits

MDN 添加了以下建议:

如果您担心性能,则应避免设置对象的[[Prototype]]。相反,请使用Object.create()创建一个具有所需[[Prototype]]的新对象。

相关内容

最新更新