2016-01-23 69 views
0

是否可以使用私有方法实现装饰器?例如。使用私有实例方法实现TS/JS装饰器?

class Person { 
    @validateSomethingFirst 
    public doSomething() { 
    } 

    private validateSomethingFirst() { ... } 
} 

我的初步调查似乎表明,这是不可能的,但我似乎无法找到一个坚实的参考。

+0

[当然可以](http://stackoverflow.com/q/16919473/1048572),为什么不呢? – Bergi

+0

我在问private _decorators_,而不是_functions_。谢谢! –

回答

2

是的,它是可能的,如果你要将你的私有方法为静态:

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

    @AAA.Dec 
    public Prop: number;  
} 

用实例方法将是不可能的,因为指私有的实例方法,你将需要访问“这个”,这将是在那个时候未定义。通过查看生成的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; 
})(); 

这里“这”将在电话的那一刻是不确定的。

希望这会有所帮助。