在JavaScript中继承代理类(函数)时发生了什么

时间:2017-11-13 15:32:11

标签: javascript class inheritance proxy es6-proxy

我想继承一个带代理构造函数的函数,比如下面的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课程中发生了什么,我该如何解决(或者可能)?

1 个答案:

答案 0 :(得分:0)

您忽略了new.target,这就是您的代理构造函数创建的实例始终只从Base(代理处理程序中的target)继承的原因,而不是{ {1}}。

您应该使用Reflect.construct作为construct trap的默认操作:

SubB