javascript - 为什么静态方法不能在实例方法或构造函数内部使用

标签 javascript ecmascript-6

这是代码:

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继承了Foom静态方法。

或者如果它特别应该是父类,

b() {
    super.constructor.m();
}

关于javascript - 为什么静态方法不能在实例方法或构造函数内部使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41617440/

相关文章:

javascript - 如何获得十六进制颜色值而不是 RGB 值?

javascript - Object.is 与 ===

javascript - 获取一个style = block的div id

javascript - 同步函数在异步函数中的影响

javascript - Backbone : properties in ECMAScript 6

javascript - 导出 React 组件最合乎逻辑的方法是什么?

javascript - ES6 类 'this' 用于非类方法

javascript - 如何将 this.state 传递给 react-routes?

Javascript, jquery 错误 TypeError : $(. ..).autocomplete is not a function

javascript - 是否可以将原始 UDP 数据包直接从浏览器发送到 ip/端口?