我有两个类:首先检查文件是否存在且有效;第二个用那个文件做一些东西:
class Validator {
constructor(){
this.file = './file.json';
}
check(){ ... }
}
class Modificator {
action1(){ ... }
action2(){ ... }
}
我想要的是第一个类的方法自动调用第二个类的每个方法。 这有点棘手,但我真的不想像这样手动完成:
class Validator {
constructor(){
this.file = './file.json';
}
static check(){ ... }
}
class Modificator {
action1(){
let status = Validator.check();
...
}
action2(){
let status = Validator.check();
...
}
}
最佳答案
- 通过使用包装器
class Validator {
static check () {console.log('checked')}
static checkCbk (fn) {
return _ => {
this.check()
//then callback
fn()
}
}
}
class Modificator {
//via public instance field
action1 = Validator.checkCbk(function () {
console.log('mod::action1')
})
}
//or by prototype
Modificator.prototype.action2 = Validator.checkCbk(function(){
console.log('mod::action2')
})
var m = new Modificator()
m.action1()
m.action2()
但是请注意,如果您要子类化 Modificator
,您可能会忘记重新包装您的方法...
- 通过签订契约(Contract)
更常见的方式是签订契约(Contract)并在契约(Contract)履行时委托(delegate)实现。
这样你在扩展时就不必担心,因为无论如何检查都是在基类中进行的。
class Validator {
static check () {console.log('checked')}
}
class Contract {
action1 () {
Validator.check()
this._action1()
}
}
class M2 extends Contract {
_action1 () {
console.log('mod2::action1')
}
}
var m = new M2()
m.action1()
关于javascript - 从一个类调用方法时从另一个类调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59319817/