抽象类的方法如何规定子类实现时强制执行固定函数?

如题, typescript 中抽象类的抽象方法被子类实现时,能否强制执行一段固定语句。
如下,B和C都实现了A的test方法,想在test执行前后都console一次固定语句。

abstract class A{
    abstract test():void
}

class B extends A{
    test(){
        // 这里想固定执行一段话,如 console AAA
        console.log('AAA')

        // ......
        console.log('test class B')
        
        // 结尾也想执行一段固定的话,如 console AAAA
        console.log('AAAA')
    }
}
class C extends A{
    test(){
        // 这里想固定执行一段话,如 console AAA
        console.log('AAA')

        // ...
        console.log('test class C')

        // 结尾也想执行一段固定的话,如 console AAAA
        console.log('AAAA')
    }
}

有什么实现方式吗? 目前是都copy了一次代码。

阅读 2.3k
2 个回答
function Inject() {
  return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
    const method = descriptor.value;
    descriptor.value = function() {
      console.log('before');
      method.apply(this, arguments);
      console.log('after');
   }
  };
}

abstract class A{
    abstract test():void
}

class B extends A {
  @Inject()
  test() {
    console.log('test b');
  }
}

var b = new B();
b.test();

确定有这种需求可以考虑拆开。例如

readonly protected function beforeFoo();
readonly protected function afterFoo();
readonly public function foo() {
    beforeFoo();
    doFoo();
    afterFoo();
}
abstract protected function doFoo();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题