javascript考试知识考点:Javascriptaop(面向切面编程)之around(环绕)分析
05-11
0

为了帮助大家网页设计师考试基础知识,我们考吧网特为广大考生整理关于javascript知识精选资料,希望广大考生能够喜欢。想了解更多资讯请继续关注我们考吧,同时也欢迎来我站学习。

Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知)、after(后置通知)、around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点。但是利用aop可以有效的改善js代码逻辑,比如前端框架dojo和yui3中AOP则被提升至自定义事件的一种内在机制,在源码中随处可见。得益于这种抽象使得dojo的自定义事件异常强大和灵活。dojo中aop的实现在dojo/aspect模块中,主要有三个方法:before、after、around,本文会带领大家一步步实现around方法,后续文章将会深入解析dojo/aspect模块的结构体系。

js要实现环绕通知,最简单也最应被想到的就是利用callback(回调)

?

1
2
3
4
5
6
7
8
9
10
11
advice = function(originalFunc){
 console.log("before function");
 originalFunc();
 console.log("after function");
}
var obj = {
 foo: function(){
 console.log('foo');
 }
}
advice(obj.foo)

结果:

before function

foo

after function

哈哈,太简单了,是不是可以回去睡觉了。。。。

可是,是不是有点太粗糙了。。。。说好的环绕呢。。。。至少下次调用obj.foo也应该是这个结果,而不是一个干巴巴的“foo”;为此我我们需要在改动一下,利用一下闭包

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
advice = function(originalFunc){
 return function() {
 console.log("before function");
 originalFunc();
 console.log("after function");
 }
}
var obj = {
 foo: function(){
 console.log(this.name);
 },
 name: "obj"
}
obj.foo = advice(obj.foo)
obj.foo()

输出:

before function

after function

看起来达到了环绕的效果,but说好的name哪去了。。。。

在advice返回的闭包中我们还要处理作用域问题

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
advice = function(originalFunc){
 return function() {
 console.log("before function");
 originalFunc();
 console.log("after function");
 }
}
var obj = {
 foo: function(){
 console.log(this.name);
 },
 name: "obj"
}
  
keepContext = function() {
 return obj['foo'].call(obj);
}
  
obj.foo = advice(keepContext);

看起来是利用call解决了作用域问题,我们运行一下看看:

编辑推荐:

Flash考试高频知识考点汇总 

3dsmax快捷键考试复习笔记整理汇总 

相关内容

热门资讯

Flash考试高频知识考点:打... Flash考试高频知识考点:打开“库”面板(“窗口”
acdsee考试知识考点:基本... acdsee考试知识考点:基本功能及实用技巧
3Dsmax考试知识考点:轴心... 3Dsmax考试知识考点:轴心工具
3Dsmax考试知识考点:父子... 3Dsmax考试知识考点:父子连接
acdsee考试知识考点:查找... acdsee考试知识考点:查找文件副本
CAD2007考试知识考点:基... CAD2007考试知识考点:基本图形的绘制—直线
acdsee考试知识考点:制作... acdsee考试知识考点:制作文件清单
3Dsmax考试知识考点:车削 3Dsmax考试知识考点:车削
3Dsmax考试知识考点汇总 3Dsmax考试知识考点汇总
CAD2007考试知识考点:基... CAD2007考试知识考点:基本图形的绘制—多段线