首页 > 代码库 > 装饰模式之AOP之动态改变参数,和原函数绑定属性丢失
装饰模式之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
装饰模式之AOP之动态改变参数,和原函数绑定属性丢失
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。