【发布时间】:2019-02-22 20:57:51
【问题描述】:
我正在使用以下包装器代理方法:
public static wrap(target) {
function construct(constructor, args) {
const c: any = function(this) {
return constructor.apply(this, args);
};
c.prototype = constructor.prototype;
return new c();
}
const f = (...args) => {
const instance = construct(target, args);
const descriptors = getMethodDescriptors(target, instance);
return new Proxy<T>(
instance,
new SomeProxyHandler(descriptors)
);
};
f.prototype = target.prototype;
return f;
}
这在包装编译为 ES5 的类时效果很好,但现在我尝试针对 ES6 我在constructor.apply(this, args) 收到错误说:
TypeError: Class constructor OneOfMyClasses cannot be invoked without 'new'
如何修复此代码,以便wrap 可以代理任何 JavaScript 目标的类并维护正确的原型链?
【问题讨论】:
标签: javascript ecmascript-6 proxy