JS實現AOP(面向切面程式設計--裝飾者模式)
阿新 • • 發佈:2019-02-04
1、AOP:主要作用是把一些跟核心業務邏輯模組無關的功能抽離出來,這些跟業務邏輯無關的功能通常包括日誌統計、安全控制、異常處理等。把這些功能抽離出來之後,再通過“動態織入”的方式參入業務邏輯模組中。
2、AOP好處
- 保證業務邏輯模組的純淨和高內聚性
- 方便複用日誌統計等功能模組
3、JS實現AOP思路:把一個函式“動態織入”到另一個函式之中。我們使用Function.prototype來實現
Function.prototype.before = function(beforefn){ var _self = this; //儲存原函式引用 return function(){ beforefn.apply(this,arguments); //執行新函式,修正this return _self.apply(this,arguments); //執行原函式 } }; Function.prototype.after = function(afterfn){ var _self = this; return function(){ var ret = _self.apply(this, arguments); //【不要直接寫在return中】 afterfn.apply(this, arguments); return ret; } } var func = function(){ console.log("2") } func = func.before(function(){ console.log("1"); }).after(function(){ console.log("3"); }); func(); //1 2 3
把負責列印1和列印3的兩個函式通過AOP方式動態插入func函式。通過執行上述函式,控制檯一次輸出1 2 3。