繁体   English   中英

代理无法获取扩展类中的方法

[英]Proxy cannot get method in extended class

我正在尝试使用Proxy ,但是遇到了问题。 我有一个像这样的课程:

export class Builder {
    public doSomething(...args: (string | number | Raw | Object)[]): this {
        // Do stuff
        return this
    }
}

export class ModelBase extends Builder {
    protected _items = {}
}

export class Model extends ModelBase {

    public constructor(options?: ModelSettings) {
      super(options)
      return new Proxy(this, {
        get: function (target, property) {
          return target._items[property] || target
        }
      })
    }

    public static create() {
        return new this()
    }

}

然后,我像这样扩展Model

export class MyClass extends Model {

    public constructor() {
        super({/* Some options go here */})
        // Do some stuff
    }

    public static getItems() {
        let t = this.create()
        t.doSomething()
    }

}

然后,我调用getItems()来创建该类的实例。

MyClass.getItems()

运行此命令时,出现错误:

TypeError:t.doSomething不是函数

doSomething()ModelBase类中的何处。 如果我注释掉Proxy一切正常。 所以,我想知道为什么我不能访问父类。

您的代理正在尝试查找target._items.doSomething ,但这不存在。 target.doSomething确实存在,但是它不是在寻找。 结果,它回退到返回的target ,它是整个对象。 对象不是函数,因此不是错误。

至于解决方法,这取决于您要使用代理实现的目标。 如果代理应注意的属性有限,则可以显式检查这些属性。 或更一般而言,您可能可以检查target[property]是否存在,然后退回到target._items[property] ,然后target._items[property]回到target 同样,这取决于您要实现的目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM