Typescript Decorator,它覆盖了一组属性

时间:2015-07-14 12:31:17

标签: javascript typescript

我试图用装饰器

覆盖属性的“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的正确方法吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下,不使用箭头功能

目前this中的oldSet.call(this, value);等于全局对象 - 而不是类的实例。因此,不是分配给实例的属性,而是分配给window._entry

将代码更改为使用常规函数,该函数将使用函数this

descriptor.set = function(value) {
    oldSet.call(this, value);
};