然后,我想,更完整的问题是,“当 Javascript 引擎已知时(基于每个流行的引擎),这些考虑因素如何受到影响。”
我觉得我需要问“社区”的原因是因为像 Strongloop 这样创建 Node.js 之类的东西的人,也编写了 util.inherits 之类的代码,一个函数在其中,而不是:TheConstructorFunction.prototype.constructor = TheConstructorFunction
他们创建了一个属性定义,它本身有 4 个属性正在设置:
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
});
这对我来说似乎效率低下,但是,与这样的代码作者相比,我只是努力编写更好的 Javascript 3 年。有没有解释为什么这有效或无效?
一个答案说 util.inherits 并不是低效的,因为子类操作很少见。但是考虑到一些库处理在构建到测试结果观察之间发生的成百上千的子类操作,如果 Node.js 内部使用 util.inherits,那么这会影响其使用者的开发时间。我认为,在这个级别上,效率确实很重要,我希望 util.inherits 不会在内部使用。我什至不明白 util.inherits 的目的。为什么要拥有它?我认为它促进了复合效率低下。 require('util').inherits(C1,C2);
几乎是同义词,可能比C1.prototype=Object.create(C2.prototype); C1.prototype.constructor=C1;
如果它只是为了吸引消费者,我很冷静。我担心这些专业人士是否在内部使用该功能,因为更大的库将取决于 Node.js 的效率。至于制作.constructor
不可枚举......我认为它的“可枚举性”很重要的情况很少见,应该留给消费者,但如果内部操作取决于 util.inherits,这并不是真的留给消费者。