这是代码:
class Foo {
static m() {
console.log('m');
}
}
class Bar extends Foo {
b() {
super.m();
}
}
var b = new Bar();
b.b();
抛出:
Uncaught TypeError: (intermediate value).m is not a function
当我尝试在实例方法或构造函数中使用父类静态方法时,会生成此类错误。为什么?
据我了解,super
指的是Foo
,并且以下工作正常:
class Bar extends Foo {
b() {
Foo.m();
}
}
最佳答案
因为super
属性引用了实例方法中的Foo.prototype
属性,而super
属性引用了Foo
静态方法中的静态属性。
super(...)
调用具有特殊含义,并且在内部执行类似于 Foo.call(this, ...)
的操作。
super
单独没有任何意义,不能用作常规变量。
应该是:
b() {
this.constructor.m();
}
因为Bar
继承了Foo
的m
静态方法。
或者如果它特别应该是父类,
b() {
super.constructor.m();
}
关于javascript - 为什么静态方法不能在实例方法或构造函数内部使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41617440/