我已經看過ES.next裝飾器的一些例子,並注意到它可能使一個裝飾器作爲一個因子函數應用參數,或直接在最後同時省略()
。直接或作爲工廠函數調用ES.next裝飾器
我設法讓兩種款式分開使用,作爲工廠功能@decorate(withArgs)
,或直接使用@decorate
,但不能同時使用!
下面是一個例子: https://github.com/jayphelps/core-decorators.js#deprecate-alias-deprecated
class foo {
@deprecate
foo() {}
@deprecate("with an optional string")
bar() {}
}
我試圖考察上面提到的源代碼,但我與裝飾有限的經驗,我無法弄清楚如何建立類似的東西。
下面是如何設法@decorate
不使用任何參數
function decorate(target, key, descriptor) {
// do some stuff and then return the new descriptor
}
工作,這裏就是我如何設法@decorate(args)
帶參數的工廠函數工作:
function decorate(...args) {
return function(target, key, descriptor) {
// do some stuff using args and then return the new descriptor
}
}
正如你所看到的那樣,它可能是decorate foo()
或decorate(args) foo()
,而不是兩者。
您是否編寫了自己的@deprecate實現(如果是這樣,發佈它)?或者你難以讓他們的例子工作? –
@RobM。我更新了這個問題以顯示我的實現,我並不關心'deprecate'的實際實現。我試圖讓裝飾者在最後使用或不使用'()'。 – Wazeem
嗨,如果我的答案解決了您的問題,您能否將其標記爲已接受? – Dogoku