javascript 混合中的构造函数和 class 属性
Constructor and class properties within javascript mixins
我正在尝试理解 javascript 中的 mixin,我目前阅读的所有示例和文章都在谈论添加方法而不是属性。
我找到了Alex Jover Morales' article really useful and i have slightly modified his example to include an additional mixin and constructors with new properties within the mixins here。
我在下面所做的是反模式吗?
在 mixin 中使用构造函数和属性有问题吗?
在每个 mixin 的构造函数中调用 super() 是否有问题?
const PlayMixin = superclass => class extends superclass {
constructor(args) {
let { favouriteGame } = args
super(args);
this.favouriteGame=favouriteGame;
}
play() {
console.log(`${this.name} is playing ${this.favouriteGame}`);
}
};
const FoodMixin = superclass => class extends superclass {
constructor(args) {
let { genericFood } = args
super(args);
this.genericFood=genericFood;
}
eat() {
console.log(`${this.name} is eating ${this.genericFood}`);
}
poop() {
console.log("Going to ");
}
};
class Animal {
constructor(args) {
let {name} = args
this.name = name
}
}
class Dog extends PlayMixin(FoodMixin(Animal)) {
constructor(...args) {
super(...args)
}
bark() {
console.log("Woff woff!")
}
haveLunch() {
this.eat();
this.poop();
}
}
const jack = new Dog({name:"Jack", genericFood:"lobster",
favouriteGame:"chess"});
jack.haveLunch();
jack.play();
.as-console-wrapper { max-height: 100%!important; top: 0; }
Is what i have done below an anti-pattern?
不,不是。
Is there a problem with having a constructor and properties within a mixin?
不,只要您调用 super(...)
的方式适用于 classes 中的所有混合。
Is there a problem with calling super() within each mixin's contructor?
没有,super
总是指向扩展的class,调用那个构造函数没有问题。
我正在尝试理解 javascript 中的 mixin,我目前阅读的所有示例和文章都在谈论添加方法而不是属性。
我找到了Alex Jover Morales' article really useful and i have slightly modified his example to include an additional mixin and constructors with new properties within the mixins here。
我在下面所做的是反模式吗? 在 mixin 中使用构造函数和属性有问题吗? 在每个 mixin 的构造函数中调用 super() 是否有问题?
const PlayMixin = superclass => class extends superclass {
constructor(args) {
let { favouriteGame } = args
super(args);
this.favouriteGame=favouriteGame;
}
play() {
console.log(`${this.name} is playing ${this.favouriteGame}`);
}
};
const FoodMixin = superclass => class extends superclass {
constructor(args) {
let { genericFood } = args
super(args);
this.genericFood=genericFood;
}
eat() {
console.log(`${this.name} is eating ${this.genericFood}`);
}
poop() {
console.log("Going to ");
}
};
class Animal {
constructor(args) {
let {name} = args
this.name = name
}
}
class Dog extends PlayMixin(FoodMixin(Animal)) {
constructor(...args) {
super(...args)
}
bark() {
console.log("Woff woff!")
}
haveLunch() {
this.eat();
this.poop();
}
}
const jack = new Dog({name:"Jack", genericFood:"lobster",
favouriteGame:"chess"});
jack.haveLunch();
jack.play();
.as-console-wrapper { max-height: 100%!important; top: 0; }
Is what i have done below an anti-pattern?
不,不是。
Is there a problem with having a constructor and properties within a mixin?
不,只要您调用 super(...)
的方式适用于 classes 中的所有混合。
Is there a problem with calling super() within each mixin's contructor?
没有,super
总是指向扩展的class,调用那个构造函数没有问题。