首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多组件类的OOP

多组件类的OOP
EN

Stack Overflow用户
提问于 2017-02-12 06:19:38
回答 1查看 35关注 0票数 1

我很难写出通常由3-5个较小的模块或类组成的模块。当这些子组件需要扩展,但主模块已经在创建和实现它们的基本版本时,问题就出现了。

示例

代码语言:javascript
复制
// main module design

class Car {
  constructor() {
    this.horn = new Horn();
    this.horn.on('honk', function() {
      console.log('honked');
    })
  }
}

class Horn {
  constructor() {
    this.sound = 'hornA.wav'
  }
}

// extended module design

class RaceCar extends Car {
  constructor() {
    super();
    this.horn = new RaceHorn();

    // event handler is now missing
  }
}

class RaceHorn extends Horn {
  constructor() {
    super();
    this.horn = 'hornB.wav'
  }
}

这确实是一个非常简单的例子,而我真正的问题涉及到具有更多组件和更多设置要求的模块。我确实明白我可以把东西放到另一个initsetup或类似的函数中,但对我来说,我似乎做了一些本质上错误的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-12 07:12:12

为了解决这个问题,我强烈建议通过参数传递这些值。默认参数可以提供很多帮助

代码语言:javascript
复制
// main module design

class Car {
  constructor( parametrizedHorn=Horn ) {
    this.horn = new parametrizedHorn();
    this.horn.on('honk', function() {
      console.log('honked');
    })
  }
}

class Horn {
  constructor() {
    this.sound = 'hornA.wav'
  }
}

// extended module design

class RaceCar extends Car {
  constructor() {
    super( RaceHorn );
  }
}

class RaceHorn extends Horn {
  constructor() {
    super();
    this.sound = 'hornB.wav'
  }
}

这可能会变得非常混乱,因此可以使用初始化方法

代码语言:javascript
复制
// main module design

class Car {
  constructor() { ... }
  init( hornType=Horn ){
    this.initHorn( hornType );
  }
  initHorn( hornType=Horn ){
    this.horn = new Horn();
    this.horn.on('honk', function() {
      console.log('honked');
    })
  }
}

class Horn {
  constructor() {
    this.sound = 'hornA.wav'
  }
}

// extended module design

class RaceCar extends Car {
  constructor() {
    super();
  }
  init( hornType=RaceHorn ){
    this.initHorn( hornType );
  }
}

class RaceHorn extends Horn {
  constructor() {
    super();
    this.sound = 'hornB.wav'
  }
}

const raceCar = new RaceCar();
raceCar.init();

这是您可以使用的两种模块化模式,根据您已经使用的结构类型,您可以判断哪一种是最好的。最后的诀窍是参数化你的类的内容,或者用方法进一步模块化它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42181886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档