看了網上的一些資料,發現大家都寫得太複雜,讓新手難以入門。於是寫了這個極簡版的underscore原始碼閱讀。
原始碼:1.1:架構
(function();
this._=_;
}.call(
this));
1.2:引入exports判斷,如果不支援exports則繼續使用this
(function();if (typeof exports !== 'undefined')
exports._ =_;
} else
}.call(
this));
1.3:對_進行進一步例項化判斷:
(function();
//匯出_
if (typeof exports !== 'undefined')
exports._ =_;
} else
}.call(
this));
第一步就先這到這裡,接下來就是常用函式的包裝了。先不用管其他函式。
(function();
//匯出_
if (typeof exports !== 'undefined')
exports._ =_;
} else //
新增判斷boolean型別方法
_.isboolean = function
(obj) ;
}.call(
this));
恭喜你,接下來就可以直接使用_.isboolean了。
optimizecb,沒有太懂這裡cb是什麼,可能是context bound,上下文繫結,其實主要就是使用call改變this到當前func上。
var optimizecb = function(func, context, argcount) ;
case 2: return
function
(value, other) ;
case 3: return
function
(value, index, collection) ;
case 4: return
function
(accumulator, value, index, collection) ;
}return
function
() ;
};
cb函式就呼叫了上面的函式,如果是傳入的value是function,就執行optimizecb;如果是object就直接matcher;否則_.property
var cb = function(value, context, argcount) ;
鏈式呼叫chain,類似jquery的反覆呼叫
_.chain = function(obj) ;
underscore原始碼閱讀整理
underscore是我閱讀的第乙份原始碼,這份 比較小巧,只有1500行,我閱讀的版本是1.8.3.underscore裡封裝了很多功能性的函式,和jquery不同,我覺得jquery的特點是對針對dom,而underscore裡都是基於js的功能性函式,比如each,map等等。以下內容僅是我閱...
underscore 原始碼閱讀 四
keys one two three 檢索object擁有的所有可列舉屬性的名稱。我們知道,在js中本就提供了幾個方法如for.in.object.keys來遍歷物件的屬性,為什麼underscore還是要封裝乙個api呢?這其實是為相容ie9版本下的乙個bug做的封裝 在ie9以下的版本中,以下 ...
underscore原始碼分析 1
underscore 版本1.83 最主要的乙個特性是鏈式呼叫 1,2,3 each console.log 1 0 3 1,2,3 2 1 3 1,2,3 3 2 3 1,2,3 我們先簡單的實現鏈式呼叫的功能 實現 each 1,2,3 console.log 是很簡單的 直接 each函式就搞...