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
它可以是任何对象。