Function.prototype.before=function(func){ var _self=this; return function(){ if(func.apply(this,arguments)==false){ return false; } return _self.apply(this,arguments); } } Function.prototype.after=function(func){ var _self=this; return function(){ var ret=_self.apply(this,arguments); if(ret===false){ return false; } func.apply(this,arguments); return ret; } }
var a=function(){ alert("a") }; var a0=function(){ alert(0) } var a1=function(){ alert(1) } var a2=function(){ alert(2) } var a3=function(){ alert(3) } var a4=function(){ alert(4) } n=a.before(a1).before(a2).after(a2).after(a3).after(a1).before(a4) n()//=>4 2 1 a 2 3 1 n()//=>4 2 1 a 2 3 1