问题描述

类似Java AOP,抽出业务无关功能,再动态织入,可以保持业务逻辑纯净和高内聚

解决方案

可以使用高阶函数,重写Function.prototype,添加beforeFunction和afterFunction。

代码

  1. Function.prototype.before = function(beforeFn) {
  2. const _self = this;
  3. return function() {
  4. beforeFn.apply(this, arguments);
  5. return _self.apply(this, arguments);
  6. }
  7. }
  8. Function.prototype.after = function(afterFn) {
  9. const _self = this;
  10. return function() {
  11. var ret = _self.apply(this, arguments);
  12. afterFn.apply(this, arguments);
  13. return ret;
  14. }
  15. }
  16. function fn() {
  17. console.log('2');
  18. }
  19. fn = fn.before(function(){
  20. console.log('1');
  21. }).after(function(){
  22. console.log('3');
  23. })
  24. fn();