javascript(面向面向对象编程)的分析

javascript(面向面向对象编程)的分析
AOP也被称为面向方面的编程,这是通知部具体实施,分为前(预通知)、后(后通知),左右(约通知)用弹簧,学生必须非常熟悉,并在JS,AOP技术严重忽视。但是使用它能有效地改善例如JS代码逻辑,在前面框架Dojo和YUI3 AOP的内在机理是升级到自定义事件,可以在源代码中随处可见。由于这个抽象,道场的自定义事件是非常强大和灵活。在道场AOP的实现在道场 /内容模块三个主要途径:前,后和周围。这篇文章将引导你一步一步地实现。下面的文章将深入分析结构系统的道场/方面模块。

js是使用回调(回调)来实现环绕通知的最简单也是最重要的事情。
建议=功能(originalfunc){
console.log(前);
OriginalFunc();
console.log(后功能);
}
var obj = { {
函数(){
console.log('foo);
}
}
建议(obj。Foo)
结果uff1a

在功能

Foo

经过功能

哈哈,回去睡觉太简单。 U3000 U3000

但是,是不是有点太粗糙了,这是一个很好的圆。至少下一个电话obj.foo应该是结果,而不是干foo;因此我需要改变,利用闭合
建议=功能(originalfunc){
返回函数(){
console.log(前);
OriginalFunc();
console.log(后功能);
}
}
var obj = { {
函数(){
console.log(这个名字);
},
名称:目标
}
obj.foo =建议(obj。Foo)
Obj.foo()
输出:

在功能
经过功能
它看起来像环绕的效果,但却说出了好名字。

在通知返回的闭包中,我们还必须处理范围问题。
建议=功能(originalfunc){
返回函数(){
console.log(前);
OriginalFunc();
console.log(后功能);
}
}
var obj = { {
函数(){
console.log(这个名字);
},
名称:目标
}

keepcontext =函数(){
返回obj { 'foo'}呼叫(obj);
}

obj.foo =建议(keepcontext);
它似乎是用调用来解决范围问题。让我们运行它。
凹槽,这是死循环的传说。
它似乎必须改变,使用一个中间变量来消除死循环。
建议=功能(originalfunc){
返回函数(){
console.log(前);
OriginalFunc();
console.log(后功能);
}
}
var obj = { {
函数(){
console.log(这个名字);
},
名称:目标
}

VaR存在= obj.foo;

keepcontext =函数(){
返回exist.call(obj);
}

obj.foo =建议(keepcontext);
Obj.foo();
输出:

在功能

obj

经过功能

哈哈,世界突然变得美丽了。

但看起来这一堆代码并不太低,我们将得到一点高度抽象。嗯,我想是这样。
功能(obj,道具,建议){
VaR存在= obj {道具};
var =建议(函数()){
返回exist.call(obj参数);
});
obj {道具} =建议;
}

建议=功能(originalfunc){
返回函数(){
console.log(前);
OriginalFunc();
console.log(后功能);
}
}
var obj = { {
函数(){
console.log(这个名字);
},
名称:目标
}

在(obj,'foo,建议);

Obj.foo();
环绕方法将进程与特定对象解耦,只要按下面的格式编写,就可以获得周围的效果。
建议=功能(originalfunc){
返回函数(){

OriginalFunc();

}
}
哈哈,此刻高,疯狂拉凉渣天有…

U3000 U3000

接下来的问题是:如果你不小心打在法swollen.yes.this是一个问题,如果我们要让在返回一个句柄与消除消除绑定结合 /删除事件的方法。

删除是让函数要执行的下一次不执行相应的方法,但只运行originalfunc方法
功能(obj,道具,建议){
VaR存在= obj {道具};
var =函数(){()
返回exist.call(obj参数);
};
建议(上);
obj {道具} =建议;

返回{
删除:函数(){
Obj{prop} = exist;
建议= null;
前=空;
存在=空;
obj = null;
}
}
}
var计数= 1;
建议=功能(originalfunc){
var电流=计数+ +;
返回函数(){
console.log(前+电流);
originalfunc(参数);
console.log(后功能+电流);
}
}
var obj = { {
函数(精){
console.log(this.name + 和+精氨酸);
},
名称:目标
}

H1 =周围(obj,'foo,建议);
H2 = around (obj,'foo', advice);
Obj.foo();
h1.remove();
Obj.foo();
h2.remove();
Obj.foo();
输出:
在功能2
在功能1
obj对象参数}和{
经过功能1
经过功能2
对象和定义
在功能1

这一个。不仅结果有点乱。还错了……是可以忍受的,叔叔不能忍受,叔叔能忍受,嫂子不能忍受!
啊,闭包,请给我力量。
功能(obj,道具,建议){
VaR存在= obj {道具};
var =函数(){()
返回exist.apply(obj参数);
};
建议(上);
obj {道具} =函数(){
当您调用删除时,建议是空的。
使用范围链闭包可以访问建议的和先前的变量,根据是否是空的来决定谁可以调用。
还建议advised.apply(obj参数):previous.apply(obj参数);
};

返回{
删除:函数(){
使用范围链闭包,当移除时建议将为空,而不是在实现过程中进入周围。
不能删除
/ / obj {道具} =存在;
建议=空;
建议= null;


/ / obj = null;
}
}
}
var计数= 1;
建议=功能(originalfunc){
var电流=计数+ +;
返回函数(){
console.log(前+电流);
originalfunc.apply(这个参数);
console.log(后功能+电流);
}
}
var obj = { {
函数(精){
console.log(this.name + 和+精氨酸);
},
名称:目标
}

H1 =周围(obj,'foo,建议);
H2 =周围(obj,'foo,建议);
Obj.foo('Hello World);
h1.remove();
Obj.foo('Hello World);
h2.remove();
Obj.foo('Hello World);

输出:

在功能2
在功能1
obj,你好世界
经过功能1
经过功能2
在功能2
obj,你好世界
经过功能2
obj,你好世界
收盘后!
第一个晚上的博客是喝醉了,听到下我妈的我二点,四点听到乌鸦乌鸦,没有人知道什么鸟,啾啾的电话,五点这一束鸟…

参考文章:

使用AOP来改进Javascript代码

YUI3的AOP(面向面向对象编程)和OOP(面向对象编程)

对切向编程(AOP)的理解

tag:面向对象编程电脑软件Javascript

相关内容