ES6 中 Proxy 和 EventTarget 的 Mixin 模式

吐槽

Javascript sucks

Javascript 不支持多重继承,也不支持原生类的 mixin。想实现一个具备 ProxyEventTarget 多重功能的混合类。以下代码会引发异常:

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
    }
});