函数虽简,用法可变,replace()的一种独特用法
有的时候很简单的函数却会衍生出很巧妙的用法,这是一种代码编写的境界,也是推动编程艺术发展的一种方式。我前些天看到一种replace的用法,觉得很好,拿出来分享讲解一下。
在看别的代码时,发现这样一段:
"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 }); }; });
把涉及到replace用法的代码从中提出,结果运行出现错误,于是添加必要的代码使其正常。
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()方法来写,可以大大节省代码量,这个办法太巧了。
浙公网安备 33010602011771号