介绍
这是一个非常简单的脚本,让您创建一个代理类在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参数,beforeFunction
,afterFunction
更多
。
该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++;
};
var afterFunction = function(name, ret, args) {
this.__levels–;
for(var i = 0; i < this.__levels; i++) {
process.stdout.write(“\t”);
}
console.log(” Exiting: >> “, name)
}
var createCallsLogger = createProxyDefinition(beforeFunction, afterFunction);
createCallsLogger
现在是一个函数,它接受任何构造和修改它需要。
因为这将是一个示例使用:
createCallsLogger(Math);
var math = new Math();
math.add(1, 2);
math.subtract(10, 3);
math.multiply(5, 5);
math.divide(16, 4);
现在任何函数调用数学将被记录到控制台,输出示例如下:
usr/bin/node index.js
Entering: >> add : { ’0′: 1, ’1′: 2 }
Exiting: >> add
Entering: >> subtract : { ’0′: 10, ’1′: 3 }
Entering: >> add : { ’0′: 10, ’1′: -3 }
Exiting: >> add
Exiting: >> subtract
Entering: >> multiply : { ’0′: 5, ’1′: 5 }
Exiting: >> multiply
Entering: >> divide : { ’0′: 16, ’1′: 4 }
Exiting: >> divide
Process finished with exit code 0
引擎下
功能createProxyDefinition
需要定义一个类(构造函数),在所有它的原型功能,取代了每个功能的一个新功能,它需要调用和事件的代表团。此功能所附文件proxy.js的。粗略地说,这是它在伪代码。
function __createProxy(constructor, proxyInstanceDefinition)
{
if (proxy already added)
return;
for each function in constructor.prototype
{
var newName = __ + functionname;
copy original function reference to a new function with name “NewName”
create a new function to replace the current. the new function will call original function)
}
}
最后
这种代理的创建方法不拟用于生产代码,理想情况下,它被用于迅速嘲讽或进军其他类的,像的情况下,用它来 嘲笑node.js的错误,实现全覆盖。你是不建议使用它在生产代码的原因,是因为它基本上为每个函数创建新的函数实例被覆盖,所以理想而言,在生产环境中做这样的事情,你应该有自定义编写的代码,完全实现你想要什么没有额外的开销重定向和内存使用情况。
相关推荐
JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体模式(Singleton Pattern)...
第1章 简介 模式 JavaScript:基本概念 ... 代理模式 中介者模式 观察者模式 小结 第8章 DOM和浏览器模式 关注分离 DOM脚本 事件 长期运行脚本 远程脚本 配置JavaScript 载入策略
代理模式中的代理对象和目标对象实现相同的接口,客户端与代理对象进行交互,代理对象则根据具体情况决定是否将请求转给目标对象。在JavaScript中,代理模式可用于控制对象访问、惰性初始化、访问日志记录等。 ...
在JavaScript这种动态类型的脚本语言中,设计模式尤其重要,因为它们可以帮助开发者在不断变化的环境中保持代码的清晰和稳定。 一、单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问点。在JavaScript...
7. **代理模式(Proxy)**:创建一个代理对象,控制对原对象的访问。在JavaScript中,可以利用Reflect API和Proxy对象实现。 以上只是JavaScript高级特性和设计模式的一小部分。深入理解和熟练应用这些概念,将有助...
在提供的代码示例中,有两个简单的JavaScript代理模式实现: 1. 首个例子中,`maijia`是买家,`fongdong`是卖家,`zhongjie`是中介。中介`zhongjie`实现了买卖房屋的方法,它作为买家和卖家之间的桥梁,控制着交易...
在JavaScript中,常见的设计模式包括工厂模式、单例模式、观察者模式、装饰器模式、代理模式等。例如,工厂模式可以用来创建对象,避免直接使用new操作符,提高代码的可扩展性;单例模式确保一个类只有一个实例,常...
代码复用是软件工程的关键原则,这部分可能会讲解如何在JavaScript中实现代码复用,如函数组合、装饰器模式、代理模式等。这些模式可以有效地减少代码重复,提高代码的可维护性和可读性。 七、设计模式 书中可能会...
5. **代理模式**:代理模式为其他对象提供一种代理以控制对这个对象的访问。在JavaScript中,可以利用闭包或Proxy对象来实现这一模式,用于增强对象的功能或进行数据验证。 6. **装饰器模式**:装饰器模式允许向...
但在javascript中,代理模式最常用到的两种方法是虚拟代理和缓存代理。 虚拟代理 在理解虚拟代理时,可以将其想象为一个经纪人,客户程序需要通过这个虚拟代理(经纪人)来调用本体对象的方法。 虚拟代理示例demo1: ...
"函数式编程"也是JavaScript设计模式中的一个重要概念,它鼓励使用无副作用的纯函数和高阶函数,减少代码耦合,提高可读性和可测试性。"柯里化"和"偏函数"是函数式编程中的两种技术,它们可以提升函数的灵活性和重用...
缓存代理模式(Cache Proxy Pattern)是设计模式中的一种,尤其适用于处理昂贵计算结果的场景。它通过在目标函数与调用者之间添加一个代理,来实现结果的缓存,避免重复计算,提高程序性能。 ### 一、缓存代理模式...
在JavaScript中,常见的设计模式有单例模式、工厂模式、观察者模式、装饰器模式、代理模式、策略模式、命令模式、模态模式、建造者模式以及组合模式等。这些模式都是为了提升代码质量、降低复杂度和提高代码复用性。...
代理模式在JavaScript中非常有用,特别是在处理数据访问、远程方法调用、事件处理以及在运行时动态地拦截和修改对象行为的情况下。 在描述中提到的“通过一个函数调用,用JavaScript将带有代理的类包装起来”,这是...
5. 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 6. 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 7. jQuery插件的设计模式:设计用于扩展jQuery的...
以上只是JavaScript中部分常见的设计模式,实际开发中还有许多其他模式,如代理模式、适配器模式、策略模式等,都可以根据项目需求灵活应用。理解并熟练运用这些设计模式,可以显著提高代码质量和可维护性。
结构型模式如装饰器模式、适配器模式、代理模式等,解决对象之间的组合和关联问题。行为型模式如观察者模式、策略模式、责任链模式等,关注对象间通信和行为的分配。 例如,单例模式确保一个类只有一个实例,并提供...
在JavaScript中,尽管它是一种动态类型的脚本语言,但同样可以从设计模式中受益。在这个“设计模式_javascript_源码.zip”压缩包中,我们可以期待找到一系列JavaScript实现的设计模式示例。 1. 单例模式:确保一个...
5. **代理模式**:为其他对象提供一个代理以控制对这个对象的访问。在JavaScript中,可以用来封装或拦截某些操作。 6. **装饰者模式**:动态地给对象添加新的功能,同时又不改变其原有的结构。常用于扩展对象的行为...
在JavaScript中,可以通过创建一个代理对象来拦截对目标对象的访问,并在必要时进行过滤或处理。 ### 观察者模式(Observer Pattern) 观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,...