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实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 Javascript
node.js中的fs.fchmodSync方法使用说明
Dec 16 Javascript
移动端JQ插件hammer使用详解
Jul 03 Javascript
freemarker判断对象是否为空的方法
Aug 13 Javascript
在React框架中实现一些AngularJS中ng指令的例子
Mar 06 Javascript
jQuery实现磁力图片跟随效果完整示例
Sep 16 Javascript
基于vue组件实现猜数字游戏
May 28 Javascript
用jquery获取select标签中选中的option值及文本的示例
Jan 25 jQuery
利用Promise自定义一个GET请求的函数示例代码
Mar 20 Javascript
jQuery位置选择器用法实例分析
Jun 28 jQuery
微信小程序之数据绑定原理解析
Aug 14 Javascript
Vue2.0 实现页面缓存和不缓存的方式
Nov 12 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
如何对PHP程序中的常见漏洞进行攻击
2006/10/09 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
JS 日期验证正则附asp日期格式化函数
2009/09/11 Javascript
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
js里的prototype使用示例
2010/11/19 Javascript
一些实用的jQuery代码片段收集
2011/07/12 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
javaScript中"=="和"==="的区别详解
2018/03/16 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
python求前n个阶乘的和实例
2020/04/02 Python
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
商务助理岗位职责
2013/11/13 职场文书
经典大学生求职信范文
2014/01/06 职场文书
售后服务承诺书范文
2014/03/26 职场文书
保安2014年终工作总结
2014/12/06 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android