ES6 中 Proxy 和 EventTarget 的 Mixin 模式
吐槽
Javascript sucks
Javascript 不支持多重继承,也不支持原生类的 mixin。想实现一个具备 Proxy
和 EventTarget
多重功能的混合类。以下代码会引发异常:
javascriptlet mixin = new Proxy(new EventTarget(), {
get(target, property, receiver) {
if (property in target) {
return target[property];
}
// do something
}
});
运行:
javascriptmixin.addEventListener(...)
错误:
Uncaught TypeError: Illegal invocation
正确的代码如下:
javascriptlet mixin = new Proxy(new EventTarget(), {
get(target, property, receiver) {
if (property in target) {
return (...args) => {
target[property].apply(target, args);
};
}
// do something
}
});