使用私有实例方法实现TS / JS装饰器?

时间:2016-01-23 14:27:57

标签: javascript typescript decorator

是否可以使用私有方法实现装饰器? E.g。

{{1}}

我的初步调查似乎表明这是不可能的,但我似乎无法在此找到可靠的参考。

1 个答案:

答案 0 :(得分:2)

是的,您可以将私有方法声明为静态:

class AAA
{
    private static Dec(target: any, key: string) 
    {
        console.log("Decorator applied");
    }

    @AAA.Dec  
    public Prop: number;    
}

使用实例方法将无法实现,因为要引用私有实例方法,您需要访问此时未定义的“this”。通过查看生成的js代码很容易。如果我们在上面的示例中更改为实例方法 - js代码将是:

var AAA = (function () {
    function AAA() {
    }
    AAA.Dec = function (target, key) {
        console.log("Decorator applied");
    };
    __decorate([
        this.Dec, 
        __metadata('design:type', Number)
    ], AAA.prototype, "Prop", void 0);
    return AAA;
})();

这里'this'将在通话时未定义。

希望这有帮助。

相关问题