我试图用装饰器
覆盖属性的“set”Decortaor:
function MaxLength(maxLength: number) {
return function (target: Object, key: string, descriptor: TypedPropertyDescriptor<string>) {
var oldSet = descriptor.set;
descriptor.set = (value) => {
oldSet.call(this, value);
}
}
}
装饰属性:
private _entry: string = null;
@MaxLength(30)
public get entry(): string { return this._entry }
public set entry(value: string) { this._entry = value }
当调用“oldSet.call(this,value)”时,“_ entry”-field保持为空。
有人知道覆盖“set”-Mehtod的正确方法吗?
答案 0 :(得分:2)
在这种情况下,不使用箭头功能。
目前this
中的oldSet.call(this, value);
等于全局对象 - 而不是类的实例。因此,不是分配给实例的属性,而是分配给window._entry
。
将代码更改为使用常规函数,该函数将使用函数this
:
descriptor.set = function(value) {
oldSet.call(this, value);
};