[英]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.