js class方法调用怎样切面?

小木
  • 295
class test{
  findOne(){
  }
  findAll(){
  }
}
class test1 extends test{
 ...
 wrap(p){
 
 }
 handle(){
   return this.wrap(this.findOne())

 }
 haddle1(){
   return this.wrap(this.findAll())

 }
}

test1每个方法使用都要使用wrap预处理,去掉wrap包括后,怎样让每个handle执行时自动wrap包括执行比如new test1().handle()时自动wrap执行,不能像这样wrap(new test().handle()).

回复
阅读 738
1 个回答

挂一层代理试试?

let Test1 = class{
  constructor(wrapName = 'wrap'){
    let that = this
    return new Proxy(this, {
      get(target, key){
        if(key !== wrapName && key !== 'constructor' && typeof target[key] === 'function'){
          return (...params)=>that[wrapName](target[key](...params))
        }else{
          return target[key]
        }
      }
    })
  }
  wrap(fnN) {
    console.log(...fnN)
    console.log(`%cthis is wrap`,'color: red;')
  }
  fn1(){
    return ['%cthis is fn1','color: green;']
  }
}

~(new Test1()).fn1()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏