我正在尝试使用JavaScript装饰器,但是在传递给装饰器函数的目标参数方面遇到了一些困难。
例如,如果你有:
@Bar()
class Foo {
@deprecated(true)
doMagic() {}
}
function Bar() {
return function decorator(target) {
}
}
function deprecated(state) {
return function decorator(target, name, config) {
return config;
}
}
我希望您能理解,两个目标看起来是同一个东西,但实际上并不是。例如:
function Bar() {
return function decorator(target) {
let bar = new target(); // WORKS
bar instanceof target; // -> true
}
}
function deprecated(state) {
return function decorator(target, name, config) {
let bar = new target(); // ERROR
let bar = new target.constructor() // WORKS
bar instanceof target; // TypeError: Right-hand side of 'instanceof' is not callable
bar instanceof target.constructor // WORKS
return config;
}
}
如您所见,两个目标(target)之间存在差异,我的问题是第二个目标出了什么问题。
我使用的是node v7.8.0,并且正在使用以下Babel插件(.babelrc):
{
"presets": [
"es2015",
"stage-0"
]
}