码迷,mamicode.com
首页 > 其他好文 > 详细

装饰模式之AOP之动态改变参数,和原函数绑定属性丢失

时间:2017-05-08 12:24:51      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:ons   after   代码   inf   get   user   this   模式   define   

//动态改变参数一
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之动态改变参数,和原函数绑定属性丢失

标签:ons   after   代码   inf   get   user   this   模式   define   

原文地址:http://www.cnblogs.com/WhiteHorseIsNotHorse/p/6824222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!