JS decorator对类函数的应用只能将类作为目标。像这样:
Common {} 'retrieveMultiple' { value: [AsyncFunction: retrieveMultiple],
writable: true,
enumerable: false,
configurable: true }
但是如果此函数使用了它的实例变量,则此操作将使函数无法使用。
装扮者在这种情况下无法获取实例。 有什么方法可以解决这个问题吗?
下面的代码是一个用于反复出现这种情况的例子,请使用babel和babel-plugin-transform-decorators-legacy运行。
function decr (target, property, descriptor) {
// you can check that target is class
console.log(target, property, descriptor)
const originFunc = descriptor.value
descriptor.value = () => {
let result = originFunc()
return result + 1
}
return descriptor
}
class Example {
constructor (value) {
this.value = value
}
@decr // comment this line to check different
showNum () {
return this.value // access instance variable
}
}
const test = new Example(3)
console.log(test.showNum())