JS模式--装饰者模式(用AOP动态改变函数的参数)

 Function.prototype.before = function (beforefn) {
            var _self = this;
            return function () {
                beforefn.apply(this, arguments);
                return _self.apply(this, arguments);
            };
        };

        var func = function (param) {
            console.log(param);
        };
        func =func.before( function (param) {
            param.b = ‘b‘;
        });
        func({a:‘a‘});
  • 看before函数中,我们会发现他们共用一个arguments,当我们将beforefn函数体内改变arguments,原函数_self接收到的函数参数列表自然也会变化。

  • 平时我们在实际开发当中会遇到http请求中带一个Token,但是有些页面又不用或者Token生成方式不一样。
  • 请看下面代码:
 Function.prototype.before = function (beforefn) {
            var _self = this;
            return function () {
                beforefn.apply(this, arguments);
                return _self.apply(this, arguments);
            };
        };
        var getToken = function () {
            return ‘token‘;
        };
        var ajax = function (type, url, param) {
            console.log(param);
        };

        ajax = ajax.before(function (type,url,param) {
            param.Token = getToken();
        });
        ajax(‘get‘,‘http://xx.com/getuseinfo‘,{name:‘test‘});

时间: 2024-10-05 17:15:01

JS模式--装饰者模式(用AOP动态改变函数的参数)的相关文章

js设计模式 - 装饰者模式

什么是装饰者模式 装饰者模式可以动态地给一个对象添加一些额外的职责.就增加功能来说,装饰者模式比通过继承生成子类更为灵活. 下面通过一个例子来详细的介绍一下. 我们销售一台电脑,每个电脑都是一个新的Computer对象,它都有一个price属性来表示价格,并且可以通过它的getPrice方法来得到它的价格: var Computer = function(price){ this.price = price || 100; }; Computer.prototype.getPrice = fun

修饰者模式(装饰者模式,Decoration)

1. 装饰者模式,动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更加有弹性的替代方案. 2.组合和继承的区别 继承.继承是给一个类添加行为的比较有效的途径.通过使用继承,可以使得子类在拥有自身方法的同时,还可以拥有父类的方法.但是使用继承是静态的,在编译的时候就已经决定了子类的行为,我们不便于控制增加行为的方式和时机. 组合.组合即将一个对象嵌入到另一个对象中,由另一个对象来决定是否引用该对象来扩展自己的行为.这是一种动态的方式,我们可以在应用程序中动态的控制. 与继承相比,组合关系

Python3-设计模式-装饰器模式

装饰器模式 动态的给原有对象添加一些额外的职责,面向切面编程(AOP),多用于和主业务无关,但又必须的业务,如:登录认证.加锁.权限检查等 Python代码实现示例 需求点: 1.在old_func()的输出前面输出Hello,everyone! 2.在old_func()的输出后面输出Thank you! 要求: 1.不能改变原调用方式 2.要遵循开闭原则,不能修改函数内的代码 # 原有函数 def old_func(name, age): print("My name is %s,I'm %

java模式—装饰者模式

装饰者模式 1.意图: 动态地给一个对象添加一些额外的职责.就增加功能来说, Decorator模式相比生成子类更为灵活.该模式以对客 户端透明的方式扩展对象的功能. 2.适用环境 (1)在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. (2)处理那些可以撤消的职责. (3)当不能采用生成子类的方法进行扩充时.一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的 子类,使得子类数目呈爆炸性增长.另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类. 3.参与者 1

PHP设计模式 五 (代理模式 装饰器模式)

代理模式 在客户端和实体之间建立一个代理对象,客户端对实体的操作全部委派给代理对象,隐藏实体具体实现细节. Proxy还可以与业务代码分离,部署到另外的服务器,业务代码中通过RPC来委派任务. 代理Proxy.php: <?php namespace Components\Proxy; class Proxy implements IUserProxy { function get($id) { $db = \Components\Register::get('slave'); $db->qu

Decorator模式 装饰器模式

Android 使用了装饰器模式 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类—这建立在额外的代码上. 通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法.但是这种方法是静态的,用户不能控制增加行为的方式和时机.如果  你希望改变一个已经初始化的对象的行为,你怎么办?或者,你希望继承许多类的行为,改怎么办

结构型模式-装饰器模式

对原有对象进行修饰,如有一个篮子,现在对篮子进行修饰,放入苹果,香蕉,橙子 package constructional.pattern.decorator; /* * 创建一个对象的抽象也就是接口 */ public interface Basket { public void show(); } package constructional.pattern.decorator; /** *身份:被装饰的对象 *一个对接口的实现,这个对象表示要我们将来要修饰的篮子里装内容,如果想修饰篮子的造型

结构型模式————装饰器模式(3.1)

什么是装饰器模式? [先吃三颗栗子:] 1.PC=主机+显示器+键盘+鼠标+鼠标垫 主机是核心,而其他的组成部分都是装饰. 2.手抓饼=饼+鸡蛋+培根+黄瓜 饼是核心,鸡蛋,培根是可选的,可以理解为装饰. 3.咖啡=咖啡+牛奶+冰+方糖 咖啡是核心,牛奶等可选. 比喻虽然形象生动,但是与实际或多或少会产生偏差. 抽象的解释:装饰器模式的目的--核心部分和装饰部分可以自由组合. 装饰器模式的功能 对于软件开发来说,聚焦于软件的灵活性和可扩展性. 装饰器模式要求: 装饰可选 装饰可扩展 核心部分可扩

【一起学设计模式】状态模式+装饰器模式+简单工厂模式实战:(一)提交个订单我到底经历了什么鬼?

前言 之前在我的博客(一枝花算不算浪漫)中已经更新过两篇设计模式相关的内容 [一起学设计模式]策略模式实战一:基于消息发送的策略模式实战 [一起学习设计模式]策略模式实战二:配合注解 干掉业务代码中冗余的if else... [一起学设计模式]访问者模式实战:权限管理树删节点操作 [一起学设计模式]命令模式+模板方法+工厂方法实战: 如何优雅的更新商品库存... 上面内容都是基于真实业务场景精简后的设计(工作中真实场景使用到的). 之前为了学习设计模式,看过网上很多相关博客讲解,大都是画下UML