replace的妙用

最近在看司徒正美的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
本文链接:https://blog.yiguochen.com/jsreplace.html
如需转载请以链接形式注明原载或原文地址。

“replace的妙用”目前已有 7 条评论