我想继承一个带代理构造函数的函数,比如下面的SubB;
const Base = function () {};
Base.prototype.baseMethod = function () { return 'base method'; }
class SubA extends (new Proxy(Base, {})) {
subMethod () { return 'sub method'; }
}
const handler = { construct: (target, args) => new target(...args) };
class SubB extends (new Proxy(Base, handler)) {
subMethod () { return 'sub method'; }
}
然而,它不能收集; Subclass方法似乎没有在SubB中绑定。
(new SubA()).baseMethod(); //=> "base method"
(new SubB()).baseMethod(); //=> "base method"
(new SubA()).subMethod(); //=> "sub method"
(new SubB()).subMethod();
//=> Uncaught TypeError: (intermediate value).subMethod is not a function
SubB课程中发生了什么,我该如何解决(或者可能)?
答案 0 :(得分:0)
您忽略了new.target
,这就是您的代理构造函数创建的实例始终只从Base
(代理处理程序中的target
)继承的原因,而不是{ {1}}。
您应该使用Reflect.construct
作为construct
trap的默认操作:
SubB