Aop javacript 实现
来源:互联网 发布:mac玩lol国服 编辑:程序博客网 时间:2024/06/05 10:53
基本概念
1切入点:PointCut
理解:
需要控制、采取行动的那个位置,譬如需要在登陆时添加日志记录的话,登陆方法(login方法就被称为PointCut)
代码:
{target: window, method: 'alert'},
1通知:advice
理解:
在切入点上施加的具体操作,譬如需要在登陆时添加日志记录的话,记录日志就通知。
代码:
其中匿名function就是一个通知。
$.aop.before( {target: window, method: 'alert'},
function(alertarguments/*这里是alert方法的参数*/) {
document.write("before alert,argument: " + alertarguments[0] + "<br />");
}
);
代码解读:
对象:
PointCut {target: window, method: 'alert'}
target:方法所属的对象
method :方法名
advice { type: _before, value: advice }
type:通知类型
value:通知业务实现
过程
1. jQuery.aop.before( pointcut, advice) ---> weave( pointcut, { type: _before, value: advice } )
逻辑:
1. 封装 用户定义advice对象,添加type通知类型属性
2 . weave(织入切点 和 切点解析)-->weaveone(source, pointcut.method, advice);
逻辑:
1.获取source对象(方法所属的对象),切点target有原型属性的话就用原型属性,否则直接使用target
2.调用weaveone
3 weaveone
逻辑:
1. 执行通知方法
2. 返回执行切点方法
代码参考:
advice.value.apply(this, [arguments, method]);
return old.apply(this, arguments);
备注:其中 arguments 参数为 切点方法的参数集合
知识点:
1. js 方法定义类型
http://dancewithnet.com/2008/05/07/javascript-anonymous-function/
2. apply 方法的使用:
function sayColor(sPrefix,sSuffix){
alert(sPrefix+this.color+sSuffix)
}
var obj = new Object();
obj.color = 'red';
sayColor.call(obj,'The color is ',' a very nice color indeed');
sayColor.apply(obj,['The color is ',' a very nice color indeed']);
call和apply的第一个参数的作用就是把实体传入,告诉浏览器我是要在obj这个对象上执行sayColor,自然this指向了obj
http://www.cnitblog.com/yemoo/archive/2007/11/30/37070.aspx
http://my.oschina.net/kisshua/blog/53229 先执行 call中对象方法
- Aop javacript 实现
- javacript 整除实现
- javacript
- 实现flash与javacript通信。
- javacript实现在线考试倒计时功能
- javacript实现TreeView中checkBox的选择
- javacript跨浏览器实现复制到剪切板
- 使用javacript和div实现Tab切换效果
- 原创:注入式广告管理实现(javacript)
- javacript实现关闭子窗口,刷新父窗口效果代码
- Silverlight 4 导航应用程序实现javacript history.go(-1)功能
- javacript实现类继承的几种方法
- AOP实现
- aop实现
- AOP实现
- AOP实现
- aop实现
- aop实现
- 最小二乘圆拟合
- 按要求打印两个已排序链表中的元素
- 字典树-----Trie树
- 学习笔记之Runtime类
- nbu 2415 Zero打怪兽
- Aop javacript 实现
- HTML5之FileReader的使用
- 简记c、c++、java异常处理机制的区别
- 黑马学习笔记--关于构造函数
- dll动态加载的方式
- TCP三次握手
- uva10048 - Audiophobia()
- 数据挖掘(五):聚类
- VS2010拖Web用户控件时卡死 解决方案