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'});

原文地址:https://www.cnblogs.com/meiyh/p/6514845.html