代码改变世界

职责链模式

2017-11-13 18:48  muamaker  阅读(165)  评论(0编辑  收藏  举报
var Chain = function(fn){
			this.fn = fn;
			this.success = null;
			this.error = null;
			this.args = [];
		}
		
		Chain.prototype.addNext = function(fn){
			return this.success = fn;
		}
		
		Chain.prototype.reuqest = function(){
			this.args = arguments;
			this.fn.apply(this,arguments);
		}
		Chain.prototype.next = function(){
			return this.success && this.success.reuqest.apply(this.success,this.args);
		}
     	
     	
     	var fn1 = new Chain(function(p){
     		console.log("1",p);
     		this.next();
     	});
     	
     	var fn2 = new Chain(function(p){
     		console.log("2",p);
     		this.next();
     	});
     	var fn3 = new Chain(function(p){
     		console.log("3",p);
     	
     	});
     	
     	fn1.addNext(fn2).addNext(fn3);
     	
     	fn1.reuqest("参数");

  

Function.prototype.after = function(fn){
     		var self = this;
     		return function(){
     			var that = this;	
     			var args = arguments;
     			self.next = function(){
     				fn.apply(that,args);
     			};
     			self.apply(self,args);
     		}
     	}
     	
     	
     	function test1(p){
     		console.log("test1",p);
     		this.next();
     	}
     	
     	function test2(p){
     		console.log("test2",p);
     		this.next();
     	};
     	
     	function test3(p){
     		console.log("test3",p);
     	}
     	
     	var order = test1.after(test2).after(test3);
     	order('order');