jQuery原始碼研究:選擇器模組所用方法(1)
阿新 • • 發佈:2019-01-11
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]屬性中
}
}
喜歡本文請掃下方二維碼,關注微信公眾號: 前端小二,檢視更多我寫的文章哦,多謝支援。