javascript - 从一个类调用方法时从另一个类调用方法

标签 javascript class

我有两个类:首先检查文件是否存在且有效;第二个用那个文件做一些东西:

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();
      ...
   }
}

最佳答案

  1. 通过使用包装器

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,您可能会忘记重新包装您的方法...

  1. 通过签订契约(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/

相关文章:

javascript - 如何使用 Node JS 驱动程序创建新的 MongoDb 数据库

python - 在列表中创建对象的两个副本

python - 如何通过可变数量增加对象属性

java - 如何在 Java 中从另一个类创建和构造一个类

javascript - 如何在没有 jQuery 的情况下向 <html> 元素添加类?

javascript - 使用 Typescript 时将捆绑 node_modules 汇总到应用程序中

javascript - 如何在 React 中的按钮状态之间切换?

javascript - 使用 Javascript 计算段落中的音节

class - 为什么无法通过 Type.getClass() 访问类的静态字段?

javascript - javascript 混淆函数中的++i 与 i++