我已经看过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