`
呼延浩云
  • 浏览: 85020 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
69e5c1d2-1364-320a-a0f2-0de5143310d8
互联网的那点事
浏览量:10994
社区版块
存档分类
最新评论

在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++;
};
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错误,实现全覆盖。你是不建议使用它在生产代码的原因,是因为它基本上为每个函数创建新的函数实例被覆盖,所以理想而言,在生产环境中做这样的事情,你应该有自定义编写的代码,完全实现你想要什么没有额外的开销重定向和内存使用情况。

0
0
分享到:
评论

相关推荐

    JavaScript设计模式+JavaScript模式+JavaScript异步编程

    - 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 - 原型模式:利用原型实例创建新对象,实现对象克隆。 - 模块模式:通过闭包创建私有变量和方法,同时提供公共接口。 - 函数组合模式:将多个函数...

    JavaScript 设计模式(高清扫描版本)- 张容铭

    JavaScript设计模式是由张容铭编著的一本关于JavaScript编程领域的重要参考书籍,主要探讨了如何在JavaScript编程中应用设计模式来提升代码质量和可维护性。设计模式是软件工程中的最佳实践,它们是针对常见问题的...

    JavaScript设计模式.pdf

    JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体模式(Singleton Pattern)...

    JavaScript设计模式Demo

    6. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在JavaScript中,常用于数据访问的拦截,或者在调用真实对象之前进行额外的操作。 7. **命令模式**:将请求封装为一个对象,使得可以使用不同的...

    JavaScript模式中文[pdf] 百度云

    第1章 简介  模式  JavaScript:基本概念 ... 代理模式  中介者模式  观察者模式  小结  第8章 DOM和浏览器模式  关注分离  DOM脚本  事件  长期运行脚本  远程脚本  配置JavaScript  载入策略

    精通javascript设计模式en版pdf

    在JavaScript中,代理模式常用于数据验证、缓存、事件处理等。 除此之外,书中还涵盖了**迭代器模式**、**适配器模式**、**策略模式**等,这些模式在实际项目中都有广泛应用,能帮助开发者构建更加灵活和可维护的...

    js策略模式和代理模式

    代理模式中的代理对象和目标对象实现相同的接口,客户端与代理对象进行交互,代理对象则根据具体情况决定是否将请求转给目标对象。在JavaScript中,代理模式可用于控制对象访问、惰性初始化、访问日志记录等。 ...

    Javascript 设计模式系统讲解与应用视频资源地址.7z

    在JavaScript这种动态类型的脚本语言中,设计模式尤其重要,因为它们可以帮助开发者在不断变化的环境中保持代码的清晰和稳定。 一、单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问点。在JavaScript...

    JavaScript高级与设计模式.zip

    7. **代理模式(Proxy)**:创建一个代理对象,控制对原对象的访问。在JavaScript中,可以利用Reflect API和Proxy对象实现。 以上只是JavaScript高级特性和设计模式的一小部分。深入理解和熟练应用这些概念,将有助...

    javascript 设计模式

    以上只是一部分JavaScript设计模式,实际中还有代理模式、门面模式、策略模式等多种模式。通过理解和应用这些模式,开发者能够编写出更易于维护、扩展和复用的代码。阅读提供的文件如"JavaScript设计模式8.pdf"、...

    Javascript 设计模式 很经典 第一本

    8. **代理模式**:为其他对象提供一个代理以控制对这个对象的访问。在JavaScript中,可以用于延迟加载、访问控制等场景。 #### 四、JavaScript高级特性 除了介绍基本的设计模式,《Pro JavaScript Design Patterns...

    JavaScript设计模式之代理模式简单实例教程

    在提供的代码示例中,有两个简单的JavaScript代理模式实现: 1. 首个例子中,`maijia`是买家,`fongdong`是卖家,`zhongjie`是中介。中介`zhongjie`实现了买卖房屋的方法,它作为买家和卖家之间的桥梁,控制着交易...

    javascript 面向对象编程.pdf javascript 设计模式与开发实践.pdf

    在JavaScript中,常见的设计模式包括工厂模式、单例模式、观察者模式、装饰器模式、代理模式等。例如,工厂模式可以用来创建对象,避免直接使用new操作符,提高代码的可扩展性;单例模式确保一个类只有一个实例,常...

    JavaScript模式(中文版带目录)

    代码复用是软件工程的关键原则,这部分可能会讲解如何在JavaScript中实现代码复用,如函数组合、装饰器模式、代理模式等。这些模式可以有效地减少代码重复,提高代码的可维护性和可读性。 七、设计模式 书中可能会...

    外文翻译:学用JavaScript设计模式

    - **代理模式**:为另一个对象提供一个替身或占位符以控制对这个对象的访问。 #### 结语 《学用JavaScript设计模式》不仅是一本技术手册,更是一本启发思考的书籍。通过对这些设计模式的学习和实践,开发者不仅...

    《Javascript 设计模式》课程代码源码

    5. **代理模式**:代理模式为其他对象提供一种代理以控制对这个对象的访问。在JavaScript中,可以利用闭包或Proxy对象来实现这一模式,用于增强对象的功能或进行数据验证。 6. **装饰器模式**:装饰器模式允许向...

    详解javascript设计模式三:代理模式

    但在javascript中,代理模式最常用到的两种方法是虚拟代理和缓存代理。 虚拟代理 在理解虚拟代理时,可以将其想象为一个经纪人,客户程序需要通过这个虚拟代理(经纪人)来调用本体对象的方法。 虚拟代理示例demo1: ...

    JavaScript设计模式 (美)奥斯马尼著(最新版)

    在JavaScript中实现代理模式可以采用以下方式: ```javascript class Image { constructor(src) { this.src = src; } load() { console.log(`Loading image from ${this.src}`); } } class ImageProxy { ...

    JavaScript设计模式与开发实践_himppf_js_jspremise_精通javascript_Js设计模式_

    "函数式编程"也是JavaScript设计模式中的一个重要概念,它鼓励使用无副作用的纯函数和高阶函数,减少代码耦合,提高可读性和可测试性。"柯里化"和"偏函数"是函数式编程中的两种技术,它们可以提升函数的灵活性和重用...

Global site tag (gtag.js) - Google Analytics