最近在看司徒正美的ajax框架代码的时候发现一段有意思的代码:
"get post".replace( dom.rword, function(method){
dom[ method ] = function( url, data, callback, type ) {
if ( dom.isFunction(data) ) {
type = type || callback;
callback = data;
data = undefined;
}
return dom.ajax({
type: method,
url: url,
data: data,
success: callback,
dataType: type
});
};
});
从ajax框架代码中提取出来的,无法单独运行,我再加点代码让这段代码可以正常运行:
var dom = {
rword : /[^, ]+/g,
isFunction : function( obj ){
return typeof obj === 'function';
},
ajax : function( options ){
console.debug( options );
}
};
调用的结果如下:
alert( typeof dom.get === 'function' ); //true
alert( typeof dom.post === 'function' ); //true
replace()方法可以用来替换和搜索字符串,第一个参数是一个正则表达式,第二个参数是要进行替换的字符串,第二个参数还可以是一个函数。上面的代码中,replace()的第二个参数就是一个函数,使用replace()方法生成了两个几乎一样的函数,如果按照常规的写法要定义两个函数肯定是要一个一个的来写,如果将上面的函数进行拆分,可以写成下面的形式:
dom.get = function( url, data, callback, type ) {
if ( dom.isFunction(data) ) {
type = type || callback;
callback = data;
data = undefined;
}
return dom.ajax({
type: 'get',
url: url,
data: data,
success: callback,
dataType: type
});
};
};
dom.post = function( url, data, callback, type ) {
if ( dom.isFunction(data) ) {
type = type || callback;
callback = data;
data = undefined;
}
return dom.ajax({
type: 'post',
url: url,
data: data,
success: callback,
dataType: type
});
};
};
如果几个函数体基本都相同的函数使用replace()方法来写,可以大大节省代码量,这个办法太精妙了。
原载于:雨夜带刀's Blog
本文链接:http://stylechen.com/jsreplace.html
如需转载请以链接形式注明原载或原文地址。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8