在ES6中通过代理捕获类定义

时间:2017-01-15 19:22:47

标签: ecmascript-6 metaprogramming es6-class es6-proxy

是否可以捕获extends?或者在类中捕获定义?例如:

class B extends A {
    method1( ) { }
    static method2( ) { }
}


是否有任何方法可以捕获以下事件:

  • B已延长A
  • method1( )已在B.prototype
  • 上定义
  • method2( )已在B上定义。


现有的机制似乎都不起作用。尝试了setPrototypeOfdefineProperty陷阱。

1 个答案:

答案 0 :(得分:1)

当类B扩展类A时,它会获取其prototype对象。因此,您可以在get上定义带有陷阱的代理,并检查所访问的属性是否为"prototype"

class A {}

PA = new Proxy(A, {
  get(target, property, receiver) {
    console.log('get', property)
    if (property == 'prototype')
      console.info('extending %o, prototype=%s', target, target.prototype)
    return target[property]
  }
})

class B extends PA {}