FED

©FrontEndDev.org
2015 - 2024
web@2.23.0 api@2.21.1

jQuery 的一些常用静态方法

前言

jQ的api中有很多静态方法,但是小编是随着代码逐行进行阅读的,所以先介绍如下几个

正文

本篇主要来看下以下几个API:

  • $.error();
  • $.trim();
  • $.parseJSON();
  • $.proxy();
  • $.now();

$.error()

//抛出一个错误
error: function( msg ) {
    throw new Error( msg );
}

这个逻辑很简单,只是调用了系统原生的异常对象;

$.trim()

// 除去字符串左右空白,如果window.trim存在则使用原生的
// 低版本就用自身的正则进行匹配
trim: trim ? function( text ) {
  return text == null ? "" : trim.call( text );
} : function( text ) {
    // 在ie低版本下还要在增强对 \xA0【不间断空格】 的匹配
    return text == null ? "" : text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
    /*
    trimLeft = /^\s+/,trimRight = /\s+$/ 顶部进行了定义
    在900多行,为了兼容IE低版本进行了再次赋值:
        rnotwhite = /\S/;
        if ( rnotwhite.test( "\xA0" ) ) {
            trimLeft = /^[\s\xA0]+/;
            trimRight = /[\s\xA0]+$/;
        }  
    */
}

$.parseJSON()

这个也不用多解释了哦,逻辑清晰,不难理解【该解释的已做注释】

//jQ解析JSON逻辑
parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }
    // 去除左右空白
    data = jQuery.trim( data );
    // 使用win自带的json解析
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

    /*
    检测逻辑借助于 json2.js , 以下正则在头部定义了

    用于匹配转义字符
        rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g

    用于匹配有效字符值 'str' true false null Number
        rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g

    用于匹配正确的左方括号
        rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g

    用于检测字符串中知否只含有执行字符 ] , : { }
        rvalidchars = /^[\],:{}\s]*$/

    检测传入的字符串是一个 切实 的 JSON 数据
        先把转义字符替换成@, 
        再把有效字符替换为"]", 
        在删除正确的左方括号, 
        最后检测剩下的字符串是否指包含指定的几个字符。 

    特别说明:
        此处注释出自 @高云 的书中原文【小编能力有限,解释不清这些正则的意思】
    */
    if ( rvalidchars.test( data.replace( rvalidescape, "@" ).replace( rvalidtokens, "]" ).replace( rvalidbraces, "")) ) {
        //原来这样也可以…… 比eval更安全
        //通过这种形式我们可以动态的将字符串作为函数体来进行执行;
        return ( new Function( "return " + data ) )();
    }
    //如果正则规范自然抛异常哈,window.JSON也会抛异常的.保持一致
    jQuery.error( "Invalid JSON: " + data );
}

$.proxy()

// function,obj 将fun绑定到obj的作用域上
// obj,'obj.fnName' 将obj自身的fun绑定到obj上
proxy: function( fn, context ) {
    if ( typeof context === "string" ) {
        // obj,'obj.fnName' 情况处理
        var tmp = fn[ context ];
        context = fn;
        fn = tmp;
    }
    //这个检测在之前的文章中我们已经介绍过了~
    if ( !jQuery.isFunction( fn ) ) {
        return undefined;
    }
    // slice = Array.prototype.slice 数组截取
    var args = slice.call( arguments, 2 ),
        proxy = function() {
            //如有绑定的参数则优先被传递
            return fn.apply( context, args.concat( slice.call( arguments ) ) );
        };
    // proxy.guid 是jQ的一个全局计数器
    // jQuery事件系统中,如果为dom绑定了事件监听函数的代理函数,也可以通过guid来进行移除。
    proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
    //通过这样的方式,我们可以很好的控制this确实是绑定到了某个作用域中,防止this不好控制。
    return proxy;
}

$.now()

这个API的作用还得很大的,看读者们自己需求吧【小编有时候更习惯自己动手去指定this】

// 获取当前时间的: 时间戳*1000 【毫秒】
now: function() {
    return ( new Date() ).getTime();
}

这个API好像没有开放到文档当中,不过在jQ内部中使用处还是挺多的。

感谢您的阅读,欢迎留言 交流 提问 斧正 O(∩_∩)O哈哈~