关于类函数的JS装饰器无法获取实例

时间:2017-08-17 03:04:14

标签: javascript node.js decorator ecmascript-next

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())

0 个答案:

没有答案