我试图找出在ES6中是否有更好的初始化派生类的类成员的方法-在子级还是父级中,为什么?
例如:
选项1:
class AbstractAnimal {
constructor() {
this.voice = null;
}
makeVoice() {
this.voice.make();
}
}
class Dog extends AbstractAnimal {
constructor() {
super();
this.voice = new Bark();
}
onSeeFriend() {
this.makeVoice();
}
}
选项2:
class AbstractAnimal {
constructor(voice) {
this.voice = voice;
}
makeVoice() {
this.voice.make();
}
}
class Dog extends AbstractAnimal {
constructor() {
super(new Bark());
}
onSeeFriend() {
this.makeVoice();
}
}
很显然,两种方法都有优点和缺点。 第一个选项分散了成员的初始化,这使得更难追踪。虽然第二个选项会将所有内容都冒到一个地方,但最终您可能会得到庞大的构造函数接受大量参数。
如果能听到您对此的想法,将不胜感激。 谢谢!
答案 0 :(得分:0)
这个问题是民意测验,我想指出的是,还有一种第三种方式,就像在JS:Mixins中一样
Pro s:允许将初始化抽象为 1/3 class
; AbstractAnimal
确实是抽象的
缺点:对于诸如吠叫Dog
之类的简单情况,可能很难辩解
class AbstractAnimal {
makeVoice() { this.voice.make(); }
}
const Barking = Base => class extends Base {
constructor() {
super();
this.voice = new Bark();
}
}
class Dog extends Barking(AbstractAnimal) {
onSeeFriend() { this.makeVoice(); }
}
class Bark { make() { console.log('Woof'); } }
new Dog().onSeeFriend();