AOP在js中的实现,先看看用法吧:

        var A2D = $.noConflict();//不要误会,此乃我自己写的A2D框架,非jQuery

        function fn1(name, age) {
console.log("name: " + name);
console.log("age: " + age);
}
function b1() {
console.log("b1");
console.log("b1, parameters - 0: " + arguments[0]);
console.log("b1, parameters - 1: " + arguments[1]);
console.log("b1, parameters - 2: " + arguments[2]);
console.log("b1, parameters - 3: " + arguments[3]);
console.log("b1, parameters - 4: " + arguments[4]);
console.log("b1, parameters - 5: " + arguments[5]);
}
function b2() {
console.log("b2");
}
function a1() {
console.log("a1");
}
function a2() {
console.log("a2");
} var aopfn1 = A2D.aop(fn1, {
before: [b1, b2],
after: [a1, a2]
});
aopfn1.execute("aaron", 20);

核心A2D代码实现(before和after AOP,实现了6个参数):

function aop(fn, config) {
if (!fn instanceof Function)
alert("fn must be a function");
if (config == null || config == undefined || !config instanceof Object)
alert("config can not be empty"); function aopWrapper(fn, config) {
this.realFunction = fn;
this.beforeFunctions = config.before.concat();
this.afterFunctions = config.after.concat();
}
aopWrapper.prototype.execute = function () {
if (this.beforeFunctions)
for (var fn in this.beforeFunctions)
this.beforeFunctions[fn].call(this.realFunction, arguments[0],
arguments[1],
arguments[2],
arguments[3],
arguments[4],
arguments[5]);
this.realFunction.call(this.realFunction, arguments[0],
arguments[1],
arguments[2],
arguments[3],
arguments[4],
arguments[5]);
if (this.afterFunctions)
for (var fn in this.afterFunctions)
this.afterFunctions[fn].call(this.realFunction, arguments[0],
arguments[1],
arguments[2],
arguments[3],
arguments[4],
arguments[5]);
} wrapper = new aopWrapper(fn, config); return wrapper;
}

有图有真相:

搞前端的,为什么这么难。。。。

A2D JS框架 - AOP封装的更多相关文章

  1. A2D JS框架 - DES加密解密 与 Cookie的封装(C#与js互相加密解密)

    这次实现了JS端的DES加密与解密,并且C#端也能正确解析DES的密文(反之也实现了) 使用的代码如下,非常方便: <script src="A2D.js" type=&qu ...

  2. A2D JS框架

    写了个微型JS框架 主要实现了:showDialog.noConflict.定位元素.event绑定功能 使用端的代码: <head> <title></title> ...

  3. A2D JS框架 - loadScript实现

    其实这个功能比较小,本着自己造轮子的优良传统....就自己造一个好了 <head> <title></title> <script src="A2D ...

  4. A2D JS框架 - Web API CSRF保护实现

    这次自己实现了类似jQuery中ajax调用的方法,并且针对RESTFul进行了改造和集成,实现的A2D AJAX接口如下: $.ajax.RESTFulGetCollection("/ap ...

  5. js框架封装,模拟jQuery封装

    模拟jQuery框架,利用原生的js技术,封装一个js框架,以加深对jQuery的常用api的使用和面向对象原理的理解:一:结构部分首先利用闭包,构造一个自执行函数,然后利用选择器函数Sizzle,获 ...

  6. 事务框架之声明事务(自动开启,自动提交,自动回滚)Spring AOP 封装

    利用Spring AOP 封装事务类,自己的在方法前begin 事务,完成后提交事务,有异常回滚事务 比起之前的编程式事务,AOP将事务的开启与提交写在了环绕通知里面,回滚写在异常通知里面,找到指定的 ...

  7. 微信js框架第二篇(创建完整界面布局)

    接着昨天的继续谈关于微信新出的这个js框架,今天主要谈一个页面的创建到布局的详细步骤. 一.创建一个完整页面       页面你可以创建在项目的任何节点,只要你在入口文件正确引入创建该页面的路径就可使 ...

  8. JS框架

    s框架就是将常用的方法进行封装,方便调取使用.一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计.协作构件之间的依赖关系.责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方 ...

  9. 前端Js框架汇总

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

随机推荐

  1. Jmeter和Loadrunner的异同

    1.jmeter的架构跟loadrunner原理一样,都是通过中间代理,监控&收集并发客户端发现的指令,把他们生成脚本,再发送到应用服务器,再监控服务器反馈的结果的一个过程. 2.分布式中间代 ...

  2. g4e基础篇#5 创建分支和保存代码

    章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...

  3. 关于一体机外卖单不打印外卖单号FAQ(适用正餐6.0.09,轻餐4.0.6.1,轻餐4.0.6.2)

    适用情景:升级版本后打印机打印出的外卖小票不出现外卖单号. 解决方案:设置-功能设置-小票设置-小票自定义-前台小票-外卖订单-------选择编辑,选中右侧中外卖单号或者外卖订单编号,点击保存即可. ...

  4. MyBatis笔记----报错Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ij34.model.UserMapper.selectUser

    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@41cf53f9: startup ...

  5. SqlServer 线下讲座

    2017年有幸在某互联网公司及其子公司进行了一次技术分享性质的讲座,讲座内容主要针对sqlserver 2017以及azure sql 的一些技术特性,进一步展示sql server 及其相关产品的新 ...

  6. Linux端口映射,80端口映射到8080端口

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 其中eth0为外网网卡名称 ipt ...

  7. LeetCode算法题-Minimum Depth of Binary Tree(Java实现)

    这是悦乐书的第168次更新,第170篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第27题(顺位题号是111).给定二叉树,找到它的最小深度.最小深度是沿从根节点到最近的 ...

  8. February 15th, 2018 Week 7th Thursday

    Every orientation presupposes a disorientation. 迷失过方向,才能找到方向. Not until we are lost do we begin to u ...

  9. 清除float浮动造成影响的几种解决方案

    1. “清除浮动” ??准确的描述应该是“清除浮动造成的影响”  学习浮动推荐的视频教程<CSS深入理解之float浮动> 2.如何清除浮动造成的影响??? 栗子 块级div元素包含一个内 ...

  10. 【Teradata】gtwglobal查看

    使用root登录TD数据库节点 cnsterm 6 start gtwglobal cnsterm 3 //上一个命令的window编号 h //帮助 QUIT //退出