我知道super
关键字可用于引用类中的继承属性和方法。也可以在静态方法中使用它,并调用super.staticMethod()
。在静态属性上使用super
关键字可以吗? Rollup表示这不行,我在将ESModules编译为CommonJs文件时遇到了这个问题。
使用此功能汇总
class A {
static m() {
return 1;
}
}
class B extends A {
static m() {
return super.m() + 1;
}
}
console.log("A", A.m());
console.log("B", B.m());
这里,类A
和B
上有静态方法。 B呼叫super.m()
,就像呼叫A.m()
。
汇总与此不符
class A {
static score = 5;
static info = {
prop1: "hi",
prop2: "hello"
}
}
class B extends A {
static score = super.score + 5;
static info = {
...super.info,
prop3: "welcome",
prop4: "good morning"
}
}
console.log("A", A.score, A.info);
console.log("B", B.score, B.info);
不过,我看不出第二个示例出了什么问题。当我运行它时,它没有任何错误。它是无效的还是无效的javascript,或者汇总只是在抱怨,即使它是有效的javascript吗?当我将super
替换为A
(例如,用A.score
而不是super.score
)时。
汇总错误
[!]错误:方法外的'super'关键字
我的rollup.config.js
文件
export default {
input: "index.js",
output: {
file: "commonjs/index.js",
format: "cjs"
}
}
答案 0 :(得分:1)
静态类字段are still an experimental proposal。
可以在静态属性上使用
super
关键字吗?
是的。
如果我正确解释了当前的规范草案,则在类字段中使用super.…
或super[…]
会有no early error,只有super(…)
和arguments
是语法错误-并且no early errors专门用于static
字段。字段初始化程序are evaluated as if their code was in an anonymous method,他们可以在其中访问接收者(this
值)和主对象(super
基)。
但是,似乎有an editorial issue关于如何将类值传递给定义算法的,因此重新评估允许super
的决定并非不可想象。 Rollup使用的解析器与Chrome不同,这是一个错误,但是我们不知道这两个实现中的哪个。