Aspect Oriented Programming
核心代码与非核心代码的分离。
不修改原来的功能,而是在原有的基础上,(在前或在后)添加上新的功能

例子

Node 中读取文件、获取数据,处理数据,重新写入数据

  1. 读取文件获取数据
  2. 处理加工数据
  3. 重新写加文件

读取与写入这两个程序片段就可以被抽离出来

好处

解决程序中的耦合问题,抽离和隔离出两个程序片段

编写 before、after 方法

  1. 在谁上面 / 下面
  2. 函数的执行顺序
  3. this 指向怎么保证
  4. 参数怎么保证 ```javascript Function.prototype.before = function (beforefn) { var _this = this; // 保存原函数的引用 return function () { // 返回包含了原函数和新函数的”代理”函数 beforefn.apply(this, arguments); // 先执行新函数,修正this return _this.apply(this, arguments); // 再执行原函数 }; };

Function.prototype.after = function (afterfn) { var _this = this; return function () { var ret = _this.apply(this, arguments); //先执行原函数 afterfn.apply(this, arguments); //再执行新函数 return ret; }; };

  1. ```javascript
  2. function test() {
  3. console.log("test");
  4. }
  5. test = test
  6. .after(function () {
  7. console.log("a1");
  8. })
  9. .before(function () {
  10. console.log("b1");
  11. })
  12. .after(function () {
  13. console.log("a2");
  14. })
  15. .after(function () {
  16. console.log("a3");
  17. })
  18. .before(function () {
  19. console.log("b2");
  20. });
  21. test();
  22. /*
  23. b2
  24. b1
  25. test
  26. a1
  27. a2
  28. a3
  29. */