我正在尝试使用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
。同样,这取决于您要实现的目标。
关于javascript - 代理无法获取扩展类中的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47879152/