2016-01-23 30 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; 
})(); 

這裏「這」將在電話的那一刻是不確定的。

希望這會有所幫助。

相關問題