replace的妙用

1432次阅读  |  发布于5年以前

最近在看司徒正美的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