就JavaScript引擎而言,实现原型委派而不是基于类的继承是否有好处?

Zac*_*ith 5 javascript

用类来看现代JavaScript,我的理解是这就是覆盖ECMAScript2015之前使用的基于原型的对象模型的所有语法糖.我喜欢直接使用原型链,但是类更容易.

所以在我看来,在JavaScript中,程序很可能都是根据基于类的语法指定的,但可能会根据prototype-objects的规则执行.因此,总是需要在JavaScript的编写方式和执行方式之间进行某种转换.

无论JavaScript是如何通过浏览器和其他引擎实现的,我的问题是:

从编写JavaScript引擎的角度来看,在原型委派而不是类中实现面向对象语言是否有性能或其他好处?

====编辑

一个类似的问题(基于原型的语言的隐藏类实现)有一些注释,表明传统意义上的类更容易在编译器级别实现,因为它们可以在内存中静态布局(我认为这无论如何都是隐含的),但是这不允许动态结构,如JavaScript允许.所以在我看来,原型委托可能适合在编译器级实现动态对象?

Sam*_*ult 1

JavaScript 在某种程度上是在执行之前编译的。这就是语言的编写方式和执行方式之间的“转换”。此外,正如您所说,新 ES 规范的许多功能实际上是语法糖。

无论您声明类的方式如何,它们最终都会编译为类似的抽象语法树(如果我错了,请纠正我)。它可以通过像 Babel 这样的中间编译器来实现,也可以直接通过执行实现来实现。

从这个角度来看,从编写 JavaScript 引擎的角度来看,使用更抽象的类定义的主要缺点是它需要支持更广泛的语法。

可能的方法是将类语法减少为更原生的原型语法(中间编译) - 这就是我考虑实现它的方式。这导致编译阶段的性能受到轻微影响。