【发布时间】:2017-12-19 02:18:55
【问题描述】:
我正在尝试使用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 注释掉,一切都会照常进行。所以,我想知道为什么我不能访问父类。
【问题讨论】:
-
class是关键字;我不确定这是否与问题有关,但我绝对不会称您的变量为class。 -
我实际上并没有使用
class,这只是一个例子。不过我重命名了。 -
model或modelBase有_items属性吗?如果是,_items 是否有doSomething方法? -
ModelBase同时拥有_items和doSomething -
请将其包含在您的示例中,因为从您引用的错误来看,它似乎有
_items,但没有_items.doSomething。所以代理回退到返回目标(即整个对象),这不是一个函数。
标签: javascript typescript ecmascript-6 es6-proxy