1. 程式人生 > >JS實現AOP(面向切面程式設計--裝飾者模式)

JS實現AOP(面向切面程式設計--裝飾者模式)

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。