由于 ES6 类只是 JavaScript 现有的基于原型的继承 [1] 的 语法糖, 因此(IMO)提升它的定义是有意义的:
var foo = new Foo(1, 2); //this works
function Foo(x, y) {
this.x = x;
this.y = y;
}
但以下将不起作用:
var foo = new Foo(1, 2); //ReferenceError
class Foo {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
为什么 ES6 类没有被提升?
原文由 Petr Peller 发布,翻译遵循 CC BY-SA 4.0 许可协议
实际上它们 被 提升(变量绑定在整个范围内可用)就像
let
和const
一样- 它们只是没有被初始化。不。在类定义之前使用它绝不是一个好主意。考虑这个例子
并将其与
如您所料,这会引发错误。这是静态属性、原型混合、装饰器和所有东西的问题。这对于子类化也非常重要,当您使用一个带有未调整原型的类时,子类化在 ES5 中完全中断,但现在如果
extend
ed 类尚未初始化,则会抛出错误。