日期:2014-05-16  浏览次数:20454 次

在JavaScript中的代理模式

介绍 

这是一个非常简单的脚本,让您创建一个代理类在JavaScript中。比方说,我们有一类将被用来作为构造函数(功能), 其上定义了一些功能,例如加,减,乘,除数学。    

function Math() {
this.IsMath = true;
}
Math.prototype = {
add: function(a, b) {
return a + b;
},
subtract: function(a, b) {
return this.add(a, -b);
},
multiply: function(a, b) {
return a * b;
},
divide: function(a, b) {
return a / b;
}
}

我们希望能够在某种程度上修改它的行为,将使我们能够拦截每个函数调用这个类beforeFunction的事件和afterFunction事件与内。 

我们可以决定做任何我们想要的这两个功能。您可以访问我的另一篇文章<to updated>这使得使用此通用代理脚本,让你嘲笑摩卡错误(Node.js的)非常容易。在这篇文章中,我将定义一个简单的代理登录功能调用(这样做是在node.js的使用console.log的,但它可以很容易在浏览器代码修改)。 

使用代码

一个函数名为createProxyDefinition是你所需要的。此功能定义在proxy.js从本文所附的文件,你可以下载。该函数将3参数,beforeFunctionafterFunction 更多

beforeFunction afterFunction相当的解释。每当一个函数被调用目标类,这两个事件会火。 

将给予beforeFunction两个参数,第一个是被调用的函数,第二个参数传递给函数的是一个数组。如果你返回一个值,从您的事件,原有的功能将不会被调用和返回值将被用来代替。

将给予afterFunction三个参数,第一个是被调用的函数,第二个是从原来的函数的返回值,第三个是传递给函数的参数数组。

任何额外的对象更多的是,它会扩展类的原型传入

最好一个例子来解释如何使用类。我想创建一个简单的代理定义,仅仅打印出它们的参数一起被称为函数名,它可以用于跟踪函数调用。另一种更有用的例子,这是我想写这篇文章摆??在首位的原因是让我做完整的代码覆盖node.js的项目写入时,请参考的文章<to updated>。 

要创建一个代理定义日志文件(node.js的模块)   

var beforeFunction = function(name, args) {
if(!this.__levels) {
this.__levels = 0;
}
for(var i = 0; i < this.__levels; i++) {
process.stdout.write(“\t”);
}
console.log(” Entering: >> “, name, ” : “, args);
this.__levels&#