如何让数据在函数列表中流动,并且灵活的控制其流动过程 Function.prototype.addMiddle=function(fn){ if (!this._fnList){ this._fnList=[] this._fnList.push(this); } if (!this._finalFunc){ this._finalFunc=function(){} } this._fnList.push(fn); var tmpFuncArr = [] for (var i=0,len = this._fnList.length-1;i<=len;i++){ if (i==0){ tmpFuncArr.unshift(this._fnList[len].bind(this,function(){})) }else{ var func = this._fnList[len-i].bind(this,tmpFuncArr[0]) tmpFuncArr.unshift(func) }
}
this._finalFunc = tmpFuncArr[0];
return this;
}
}
用法示例
function step3 (next,arg){
console.log('1111');
next&&next(arg)
}
step3.addMiddle(function(next,arg){
console.log('2222');
next(arg);
}).addMiddle(function(next,arg){
console.log('3333');
next(arg);
}).addMiddle(function(next,arg){
console.log('444');
console.log(arg);
next();
})
step3._finalFunc(123);
这是什么需求啊…感觉有更好的方法解决这个问题啊.看起来有点像Promise的感觉
123456
装饰器模式