zoukankan      html  css  js  c++  java
  • 装饰模式之AOP之动态改变参数,和原函数绑定属性丢失

    //动态改变参数一
    Function.prototype.before = function( beforefn ){ var __self = this; return function(){ beforefn.apply( this, arguments ); // (1) return __self.apply( this, arguments ); // (2) } }
    var func = function( param ){
    console.log( param ); // 输出: {a: "a", b: "b"}
    }
    func = func.before( function( param ){
    param.b = 'b';
    });
    func( {a: 'a'} );

    //动态改变参数二

    var ajax= function( type, url, param ){
    console.log(param); // 发送 ajax 请求的代码略
    };
    然后把 Token 参数通过 Function.prototyte.before 装饰到 ajax 函数的参数 param 对象中:
    var getToken = function(){
    return 'Token';
    }
    ajax = ajax.before(function( type, url, param ){
    param.Token = getToken();
    });
    ajax( 'get', 'http:// xxx.com/userinfo', { name: 'sven' } );
    从 ajax 函数打印的 log 可以看到, Token 参数已经被附加到了 ajax 请求的参数中:
    {name: "sven", Token: "Token"}

     //注意事项

    值得注意的是,因为函数通过 Function.prototype.before 或者 Function.prototype.after 被装
    饰之后,返回的实际上是一个新的函数,如果在原函数上保存了一些属性,那么这些属性会丢失。
    代码如下:
    var func = function(){
    alert( 1 );
    }
    func.a = 'a';
    func = func.after( function(){
    alert( 2 );
    });
    alert ( func.a ); // 输出: undefined
  • 相关阅读:
    初识 Mysql
    Python之协程
    crm 动态一级二级菜单
    admin 后台操作表格
    crm 权限设计
    crm 公户变私户的问题 班级管理 课程管理 学习记录初始化
    crm 添加用户 编辑用户 公户和私户的展示,公户和私户的转化
    crm 数据展示 和分页思想(一)
    python django(forms组件)
    python Django 中间件介绍
  • 原文地址:https://www.cnblogs.com/WhiteHorseIsNotHorse/p/6824222.html
Copyright © 2011-2022 走看看