给出两个类,如:
class A {
method() {
this.fn1();
}
fn1() {}
fn2() {}
fn3() {}
}
class B extends A {
method() {
super.method();
this.fn2();
}
fn1() {}
fn2() {}
}
我希望能够从超类中调用fn1
,从子类调用fn2
,然后从超类中调用fn3
一次。更具体地说,我想触发一个"事件"完全执行调用树后一次。
此问题与从超级构造函数调用实例方法的问题有关。我需要打电话给跟进'底部子类完成后的方法。
有关如何执行此操作的一些想法:
setTimeout
或debounce
(因为这需要同步而无法正常工作)fn3
以尝试确定它是否是树中的最后一个函数这最后一个选项似乎最有希望,但我需要一些方向。
我该如何做到这一点?
答案 0 :(得分:0)
我相信我已经想出了一个解决方案,但它可能不是最理想的,我不肯定它能正确保留上下文:
https://jsfiddle.net/b6zqw19a/30/
class After {
constructor(props) {
if (this.construct) {
if (this.afterConstruct) {
this.after({
construct: () => this.afterConstruct(),
});
}
this.construct(props);
}
}
after(fns) {
Object.entries(fns).forEach(entry => {
var key = entry[0];
var call = entry[1];
var fn = this[key];
this[key] = (function(...args) {
fn.bind(this)(...args);
call.bind(this)();
}).bind(this);
});
}
}