>[success] # AOP -- 链式调用实现 ~~~ 1.给Function 封装方法改变this指向让其逐级调用 ~~~ ~~~ Function.prototype.after = function( fn ){ var self = this; return function(){ var ret = self.apply( this, arguments ); if ( ret === 'nextSuccessor' ){ return fn.apply( this, arguments ); } return ret; } }; // after 返回的是一个function 但是function 又有afer 方法因此形成链式 var order = order500yuan.after( order200yuan ).after( orderNormal ); order( 1, true, 500 ); // 输出:500 元定金预购,得到 100 优惠券 order( 2, true, 500 ); // 输出:200 元定金预购,得到 50 优惠券 order( 1, false, 500 ); // 输出:普通购买,无优惠券 ~~~