JavaScript的ES6类成分(Javascript ES6 Classes compositi

2019-10-30 02:41发布

我挣扎,这将是一个很好的做法或更好的方法“在ES6兄弟班”报之以沟通,因为他们没有真正的父类,顾名思义。

让我更好地解释:

class Car {
  constructor(typeOfMotor){
    this.motor = typeOfMotor;
    this.mount();
    this.addListener();
  }

  mount() {
     // Some async logic here, and this will return true or false;
  }

  addListener(driver) {
    // Here i want to listen this.mount method and,
    // when return true, then call the ride method in the driver
    // If true:
    driver.ride();
  }
}

class Driver {
  constructor(driverName) {
    this.name = driverName;
  }
  ride(){
    console.log('Highway to hell!');
  }
}

class Race {
  constructor() {
    this.init();
  }

  init() {
    this.car = new Car('v8');
    this.driver = new Driver('michael');
  }
}


var race = new Race;
race.car.addListener(race.driver);

所以基本上,我有一些环境中我不需要扩展类,因为我想保持他们作为封装成为可能。

我有这个顶部类(不父,因为其他人都没有继承什么,虽然)。

而这个问题很简单,这将是创建元素之间的这种沟通的最佳方式。

Answer 1:

您可以通过该Driver class实例的Car constructor和调用该实例中的任何方法。

我想在这里重新考虑结构和业务逻辑,并检查什么样的责任每个组件应该处理。
举例来说,我认为它是由司机来决定何时驱动,但当然,当它准备的车应该发出信号。
所以车子不应该调用driver.ride ,而是刚刚信号驱动我是在和准备去,司机应该调用驱动功能。
但是,这是值得商榷的,当然。

这里是你的代码(位修改)的运行例子:

 class Car { constructor(typeOfMotor, driver) { this.motor = typeOfMotor; this.mounted = this.mount(); this.driver = driver; } mount = () => { console.log('fetching data...'); setTimeout(() => { this.drive() }, 1500) } drive = () => { // Here i want to listen this.mount method and, // when return true, then call the ride method in the driver // If true: this.driver.ride(); } } class Driver { constructor(driverName) { this.name = driverName; } ride = () => { console.log('Highway to hell!'); } } class Race { constructor() { this.init(); } init = () => { this.driver = new Driver('michael'); this.car = new Car('v8', this.driver); } } var race = new Race(); 



文章来源: Javascript ES6 Classes composition