1. 程式人生 > >jQuery原始碼研究:選擇器模組所用方法(1)

jQuery原始碼研究:選擇器模組所用方法(1)

Sizzle模組第二篇。

順序看下去,看模組所用的方法。

2、createCache()方法,建立一個受限的鍵值對型別快取。返回的是一個函式,

function createCache(){
    var keys = [];
    function cache( key, value ){
        //向陣列`keys`末尾新增元素時,返回新的長度。
        if( keys.push( key + ' ' ) > Expr.cacheLength ){
            //新的陣列長度大於Expr.cacheLength時,刪除陣列當前首位的元素在物件cache中的快取
delete cache[ keys.shift() ]; } //返回 快取後的物件 return ( cache[ key + ' ' ] = value ); } //返回快取方法 return cache; }

返回的cache函式,箇中實現解釋:Expr.cacheLength就自定義的長度,預設值為50

3、markFunction()標記一個特定的函式

function markFunction( fn ){
    fn[ expando ] = true;
    return
fn; }

fn函式新增一個唯一值的引數並返回。expando是一個字串,expando = "sizzle" + 1 * new Date()

4、assert()方法,檢測所用元素是否可用。看assert這個單詞的含義即知,是一個斷言方法。該方法主要用在檢測元素是否可用方面。

function assert( fn ){
    var el = document.createElement( 'fieldest' );

    try {
        return !!fn(el);
    } catch(e) {
        return false;
    }
finally { // try catch語句無論有無異常都執行finally //從預設父節點刪除自身 if( el.parentNode ){ el.parentNode.removeChild( el ); } //在IE中釋放記憶體 -- 相容性 el = null; } }

Sizzle模組第三篇。

5、addHandle()方法:為所有指定的屬性新增處理函式

function addHandle( attrs, handle ){
    var arr = attrs.split("|"),     //將字串attrs根據符號|分割成陣列
        i = arr.length;
    
    while( i-- ){
        Expr.attrHandle[ arr[i] ] = handler;    //將handler函式新增到attrHandle物件的arr[i]屬性中
    }
}

喜歡本文請掃下方二維碼,關注微信公眾號: 前端小二,檢視更多我寫的文章哦,多謝支援。
在這裡插入圖片描述