我想繼承類「EventEmitter」和預先定義的類「人」,這裏是代碼使用Javascript - 在ES6多重繼承,
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
introduces() {
return `My name is ${this.name}. I am ${this.age} years old.`;
}
};
\\here comes the mixin part
function mix(...mixins) {
class Mix {}
for (let mixin of mixins) {
copyProperties(Mix, mixin);
copyProperties(Mix.prototype, mixin.prototype);
}
return Mix;
}
function copyProperties(target, source) {
for (let key of Reflect.ownKeys(source)) {
if (key !== "constructor" && key !== "prototype" && key !== "name") {
let desc = Object.getOwnPropertyDescriptor(source, key);
Object.defineProperty(target, key, desc);
}
}
}
我打算創建一個新類「PersonWithEmitter」 ,並且還調用構造象下面這樣:
class PersonWithEmitter extends mix(Person,EventEmitter){
constructor(name,age){
super(name,age)
\\do something else
}
這裏談到的問題,當我創建「PersonWithEmitter」的新實例,這樣let someOne = new PersonWithEmitter("Tom",21)
,不會得到什麼,我什麼,在新的班級,我想使用this.name
和this.age
,這仍然是未定義的。 那麼,我該如何改變我的代碼,所以新類可以有其父方法,只有類「Person」的構造函數? 請原諒我破碎的英語。
**不要完全用粗體**寫。 – zzzzBov
爲什麼不使用現有的實現,如https://www.npmjs.com/package/event-emitter-mixin – loganfsmyth
@loganfsmyth我認爲這個問題更多的是關於_why它不工作,而不是實現this_。顯然,執行這樣的事情不是問題,這是mixin在JS中的工作方式...在這裏... – somethinghere