![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
Function.prototype.before = function(beforefn) { // 保存原函数的引用 var self = this; // 返回包含了原函数和新函数的代理函数 return function() { // 执行新函数,修正this beforefn.apply(this, arguments); // 执行原函数 return self.apply(this, arguments); }; }; Function.prototype.after = function (afterfn) { var self = this; return function () { // 先调用 调用的函数,在调用afterfn // 调用这个函数的也是一个函数 var ret = self.apply(this, arguments); afterfn.apply(this, arguments); return ret; }; }; var func = function () { console.log(2); }; // 每次使用之前都要这么写一遍 function init(fn) { fn = fn.before(function () { console.log(1); }) .after(function () { console.log(3); }); return fn; } func = init(func); func();