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
  • 相关阅读:
    cookie和session的区别
    使用Flexible实现手淘H5页面的终端适配
    跟自己说::::
    前端稀奇古怪的问题!!!
    为什么我老是能碰见那些糟心的事?
    谈谈我的工作日常;
    毕业后,女生要到美国发展;
    工作常识总结
    git用法
    1.date对象
  • 原文地址:https://www.cnblogs.com/WhiteHorseIsNotHorse/p/6824222.html
Copyright © 2011-2022 走看看