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();

最新文章

  1. 分段二次插值——用Python进行数值计算
  2. Gradle 刷新依赖
  3. web前端基础知识 Dom
  4. UVA12034Race(DP)
  5. PoEdu - C++阶段班- Lesson07 To Lesson10_C to C++
  6. 完整java开发中JDBC连接数据库代码和步骤 JDBC连接数据库
  7. NeHe OpenGL教程 第四十二课:多重视口
  8. (笔记)angular 包含关系的controller参数传递
  9. NIO和IO(转)
  10. Code Blocks 多文件联合编译
  11. TypeScript设计模式之门面、适配器
  12. js解析器(重要!)
  13. loadrunner整体压测执行操作步骤
  14. 测试浏览器对HTML5标签的支持
  15. Keras实现风格迁移
  16. 达梦数据库DM7小结
  17. NGINX配置详解及应用
  18. Tomcat的URL中文乱码解决以及传输优化
  19. zabbix-agent 自动注册
  20. 构建搞性能可扩展asp.net网站文摘

热门文章

  1. [转] 经典排序算法 - 基数排序Radix sort
  2. [React] Refactor a Stateful List Component to a Functional Component with React PowerPlug
  3. Java数据结构-线性表之单链表LinkedList
  4. LeetCode 之 Merge Sorted Array(排序)
  5. Android学习路线(十二)Activity生命周期——启动一个Activity
  6. Java常用知识(长期更新)
  7. spark scala word2vec 和多层分类感知器在情感分析中的实际应用
  8. [GDKOI2010] 圈地计划(网络流)
  9. VMware Workstation pro14 虚拟机下安装CentOS6.8图文教程
  10. mysql读写分离的解决方案