JavaScript之AOP编程实例


Posted in Javascript onJuly 17, 2015

本文实例讲述了JavaScript之AOP编程。分享给大家供大家参考。具体如下:

/*
// aop({options});
// By: adamchow2326@yahoo.com.au
// Version: 1.0
// Simple aspect oriented programming module
// support Aspect before, after and around
// usage:
    aop({
      context: myObject,   // scope context of the target function.
      target: "test",     // target function name
      before: function() {  // before function will be run before the target function
        console.log("aop before");
      },
      after: function() {   // after function will be run after the target function
        console.log("aop after");
      },
      around: function() {  // around function will be run before and after the target function
        console.log("aop around");
      }
    });
*/
var aop = (function() {
  var options = {},
    context = window,
    oFn,
    oFnArg,
    targetFn,
    targetFnSelector,
    beforeFn,
    afterFn,
    aroundFn,
    cloneFn = function(Fn) {
      if (typeof Fn === "function") {
        return eval('[' +Fn.toString()+ ']')[0];
      }
      return null;
    },
    checkContext = function() {
      if (options.context) {
        context = options.context;
      }
      if (typeof context[(options.target).name] === "function") {
        targetFnSelector = (options.target).name;
        targetFn = context[targetFnSelector];
      }
      else if (typeof context[options.target] === "function") {
        targetFnSelector = options.target;
        targetFn = context[targetFnSelector];
      }
      if (targetFn) {
        oFn = cloneFn(targetFn);
        oFnArg = new Array(targetFn.length);
        return true;
      }
      else {
        return false;
      }
    },
    run = function() {
      context[targetFnSelector] = function(oFnArg) {
        if (aroundFn){
          aroundFn.apply(this, arguments);
        }
        if (beforeFn){
          beforeFn.apply(this, arguments); // 'this' is context
        }
        oFn.apply(this, arguments);
        if (afterFn){
          afterFn.apply(this, arguments); // 'this' is context
        }
        if (aroundFn){
          aroundFn.apply(this, arguments);
        }
      };
    };
  return function(opt){
    if (opt && typeof opt === "object" && !opt.length) {
      options = opt;
      if (options.target && checkContext()) {
        if (options.before && typeof options.before === "function") {
          beforeFn = options.before;
        }
        if (options.after && typeof options.after === "function") {
          afterFn = options.after;
        }
        if (options.around && typeof options.after === "function") {
          aroundFn = options.around;
        }
        run();
      }
    }
  };
})();
// test examples
// ----------------- aop modify global function ---------------//
function test(name, age) {
  console.log("test fn. name = " + name + " age: " + age);
}
aop({
  target: "test",
  before: function() {
    console.log("aop before");
  },
  after: function() {
    console.log("aop after");
  },
  around: function() {
    console.log("aop around");
  }
});
// run
test("adam", 6);
// ----------------- aop test modify method in an object ---------------//
var myobj = {
  myName: "testName",
  sayName: function() {
    console.log(this.myName);
  },
  childObj: {
    age: 6,
    say: function() {
      console.log(this.age);
    }
  }
};
aop({
  context: myobj,
  target: "sayName",
  before: function() {
    console.log("aop before say name = " + this.myName);
  },
  after: function() {
    console.log("aop after say name = " + this.myName);
  },
  around: function() {
    console.log("aop around say name = " + this.myName);
  }
});
// run
myobj.sayName();
aop({
  context: myobj.childObj,
  target: "say",
  before: function() {
    console.log("aop before say name = " + this.age);
  },
  after: function() {
    console.log("aop after say name = " + this.age);
  },
  around: function() {
    console.log("aop around say name = " + this.age);
  }
});
myobj.childObj.say();

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
JQuery Study Notes 学习笔记(一)
Aug 04 Javascript
jquery键盘事件使用介绍
Nov 01 Javascript
鼠标拖动实现DIV排序示例代码
Oct 14 Javascript
jquery实现简单易懂的图片展示小例子
Nov 21 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
使用jspdf生成pdf报表
Jul 03 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
Jan 09 Javascript
vuex实现的简单购物车功能示例
Feb 13 Javascript
elementUI table表格动态合并的示例代码
May 15 Javascript
JS 5种遍历对象的方式
Jun 16 Javascript
详解Vue之计算属性
Jun 20 Javascript
js+html5实现可在手机上玩的拼图游戏
Jul 17 #Javascript
javascript封装的sqlite操作类实例
Jul 17 #Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
Jul 17 #Javascript
javascript实现根据3原色制作颜色选择器的方法
Jul 17 #Javascript
javascript实现树形菜单的方法
Jul 17 #Javascript
JSON与XML优缺点对比分析
Jul 17 #Javascript
浅谈jQuery的offset()方法及示例分享
Jul 17 #Javascript
You might like
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
COM in PHP (winows only)
2006/10/09 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
PHP return语句的另一个作用
2014/07/30 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
python基础教程之数字处理(math)模块详解
2014/03/25 Python
微信跳一跳游戏python脚本
2020/04/01 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
小学教师的个人自我鉴定
2013/10/26 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
会议简报格式范文
2015/07/20 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书