Я не Noob в JS, и я знаю, что технически нет правильного способа наследования от нескольких классов. так что мой вопрос очень прост
Есть ли идея, как я могу создать класс или просто объект, который действует так, как он наследует от двух сборок в JS Native объект. особенно EventTarget
и другой объект.
Я пытаюсь:
var map = new Map();
var eventtarget = new EventTarget();
mix = Object.create({...Map.prototype, ...EventTarget.prototype});
Object.assign(mix, et , map);
Кажется, это не работает, потому что методы в Map.prototype
не могут быть потеряны
также используя Object.assign({}, Map.prototype, ...EventTarget.prototype)
в качестве того же эффекта.
Еще одна попытка:
class Base5 extends Map{
constructor(){
super();
var eventTarget = new EventTarget();
Object.assign(this,eventTarget);
}
}
Base5.prototype = Object.create(Base5.prototype)
Object.assign(Base5.prototype,EventTarget.prototype);
// that seem to work
const b5 = new Base5();
b5.set('foo','bar');
// but...
b4.addEventListener('fire', _=>_ )
// throw Uncaught TypeError: Illegal invocation at <anonymous>:1:4
Этот работал, но он не является общим
const wm = new WeakMap();
class Base6 extends Map{
constructor(){
super();
wm.set(this, new EventTarget() )
}
addEventListener(){
wm.get(this).addEventListener(...arguments)
}
dispatchEvent(){
wm.get(this).dispatchEvent(...arguments)
}
removeEventListener(){
wm.get(this).removeEventListener(...arguments)
}
}
const b6 = new Base6();
b6.set('foo','bar'); // Map(1) {"foo" => "bar"}
b6.addEventListener('foo', e=>console.log(e) );
b6.dispatchEvent( new Event('foo') )
Так кто-нибудь может прийти с лучшим подходом?
Может быть Reflect.construct
может здесь как-то помочь