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');