原书43页,在原函数之前插入一个函数console.log(1),之后也插入一个函数console.log(3)。为什么输出不是1223而是123呢?原函数不是被调用两次了? 原书43页,在原函数之前插入一个函数console.log(1),之后也插入一个函数console.log(3)。为什么输出不是1223而是123呢?原函数不是被调用两次了?
多谢楼上,明白啦 (:
@北京+张小喵 func 函数本身并没有改变,你把最后两行代码改成这样: var new_func = func.before(function (){ console.log(1); }).after(function(){ console.log(3); }); new_func(); 你再体会下吧。
我的代码是这样的呢: Function.prototype.before = function(beforeFn) { var _self = this; return function() { beforeFn.apply(this, arguments); return _self.apply(this, arguments); }; }; Function.prototype.after = function(afterFn) { var _self = this; return function() { var ret = _self.apply(this, arguments); afterFn.apply(this, arguments); return ret; }; }; var func = function() { console.log(2); } func.before(function (){ console.log(1); }).after(function(){ console.log(3); }); func();
我这边为啥输出的是 2 ,没有1 和 3 呢?
如果你有用 jQuery 的經驗的話,這就是個鏈式的使用啊,上一鏈的輸出等於下一鏈的輸入,而原函數只是第一鏈的返回的一部分,只調用了一次。