Javascript ES6类组合

Javascript ES6类组合,javascript,ecmascript-6,multiple-inheritance,prototypal-inheritance,es6-class,Javascript,Ecmascript 6,Multiple Inheritance,Prototypal Inheritance,Es6 Class,我正在努力寻找一个好的实践或更好的方法来交流引用的“es6中的兄弟类”,因为根据定义,它们并没有真正的父类 让我解释清楚: class Car { constructor(typeOfMotor){ this.motor = typeOfMotor; this.mount(); this.addListener(); } mount() { // Some async logic here, and this will return true or

我正在努力寻找一个好的实践或更好的方法来交流引用的“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);
所以基本上,我有一些不需要扩展类的环境,因为我希望尽可能地封装它们

我有一个顶级类(不是父类,因为其他类没有继承任何东西)


问题很简单,在元素之间创建这种通信的最佳方式是什么。

您可以将
驱动程序
实例传递给
汽车
构造函数
并调用此实例中的任何方法

我将在这里重新思考结构和业务逻辑,并检查每个组件应承担何种责任。
例如,我认为由驾驶员决定何时驾驶,但当然汽车应该在准备就绪时发出信号。
因此,汽车不应该调用驾驶员。骑乘,而只是向驾驶员发出信号,告知我已上车并准备出发,驾驶员应该调用驾驶功能。
但这当然是有争议的

下面是代码的运行示例(稍作修改):
等级车{
建造师(电机、驱动器类型){
该电机=电机类型;
this.mount=this.mount();
this.driver=driver;
}
挂载=()=>{
log('fetching data…');
设置超时(()=>{
这个。驱动器()
}, 1500)
}
驱动器=()=>{
//这里我想听听这个。挂载方法和,
//当返回true时,调用driver中的ride方法
//如果为真:
这个.driver.ride();
}
}
类驱动程序{
构造函数(driverName){
this.name=driverName;
}
骑行=()=>{
console.log(‘地狱之路’);
}
}
阶级竞赛{
构造函数(){
this.init();
}
初始化=()=>{
this.driver=新驾驶员(“michael”);
this.car=新车('v8',this.driver);
}
}

var race=新的race()没有最好的方法可以做到这一点。你想如何解决这个问题取决于实际情况。您可以进行发布订阅或基于事件的连接,使用回调或直接访问函数。对我来说,似乎一场比赛有一辆或多辆车,而一辆车有一个司机。因此,
Driver
的实例可能应该传递给
Car
。当然,你也可以颠倒关系,说一个
司机
驾驶一辆
汽车
。这实际上取决于您如何建模。
extend
在显示的代码中没有意义,因为这些类型的
Car
Race
Driver
彼此之间都没有可以描述为继承的关系。不是真的。但是您的
Race
对象可以作为事件广播器处理,所有汽车和驾驶员对象都可以发布事件,如
crash
stop
mount
。。。向竞赛和任何其他对象(如Info对象)订阅竞赛上的事件,并将被告知参与竞赛的任何对象发生的事件。它基本上只是一个事件发射器和事件侦听器。但正如我所说,这在很大程度上取决于具体的用例。“但是这些嵌套类不是一个坏的做法,对吗?”我不会称它们为“嵌套的”。但不,这不是坏习惯。OOP是关于“事物”及其相互关系的建模。这是我的想法,因为这是我在ES5中一直在做的事情,但我期待着在ES6中有一些优势或类似的其他方法。多谢各位