函数虽简,用法可变,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()方法来写,可以大大节省代码量,这个办法太巧了。

 

 

posted on 2012-06-29 12:05  克拉程序  阅读(120)  评论(0)    收藏  举报

导航

永恒颜色.