Ecmascript 6 ES6类继承解析冲突的方法名

Ecmascript 6 ES6类继承解析冲突的方法名,ecmascript-6,es6-class,Ecmascript 6,Es6 Class,我希望this.method2()调用base执行base.method2(),而它实际执行derived.method2()(我理解行为背后的思想),是否可以在不重命名方法的情况下实现这一点?这里的最佳实践是什么 const base = class { method() { this.method2(); } method2() { console.error("base.method2"); } } con

我希望
this.method2()
调用
base
执行
base.method2()
,而它实际执行
derived.method2()
(我理解行为背后的思想),是否可以在不重命名方法的情况下实现这一点?这里的最佳实践是什么

const base = class {
      method() {
        this.method2();
      }

      method2() {
        console.error("base.method2");
      }
}

const derived = new class extends base {
      method() {
        super.method();
      }

      method2() {
        console.error("derived.method2");
      }
}

derived.method(); // want 'base.method2' here

您可以通过
调用
来执行此操作

method() {
  base.prototype.method2.call(this);
}
在这种情况下,从技术上讲,您不需要使用
call
并提供
this
值,因为您不使用它,但这是创建所需呼叫的最佳方法,因此它在所有情况下都能工作


顺便说一句,我不明白您想要用
const base=class{}
语句实现什么。类声明就不那么令人惊讶了:
classbase{}

有趣的是,我尝试使用不同数量的输入为base&derived的method2工作,然后使用特定于基的输入集从基中调用它-但即使这样,它仍然调用了derived.method2-这不是很直观吗?@Simple.Js否,Js没有任何基于签名(包括参数数量)的方法重载。@Simple.Js否,原因有几个。首先,调用JS函数不必使用正确数量的参数:您可以提供比声明数量更多或更少的参数,这样就可以工作了。更重要的是,您甚至不能依赖所讨论的对象是
base
对象或子类:使用
call
它可以是任何对象。