標籤:style blog color io 使用 ar java for sp
Underscore簡介:
underscore是一個非常簡潔,實用的javascript庫,和jQuery封裝類型差不多,但underscore是backbone的依賴 庫,想運行backbone就必須先引入underscore.js。“_”開頭是依賴庫underscore的一個特徵,用於區分其他庫函數名。“.” 以後就是函數的名稱。
Underscore函數:
underscore中封裝了60多個函數,供開發人員使用,接下來一個個分析。
1.each()和map函數
underscore中each 和map有一個共同的特徵,就是根據一定的條件去遍曆集合中的每一個元素。但他們之間的操作方式卻是不同的。
each()函數:
調用的格式:
_.each(list,iterator,[context])
該函數式根據iterator迭代器提供的過濾條件,遍曆list列表中的每一個元素。
源碼:
var each = _.each = _.forEach = function(obj, iterator, context) { if (obj == null) return; if (nativeForEach && obj.forEach === nativeForEach) { //如果宿主環境支援, 則優先調用JavaScript 1.6提供的forEach方法 obj.forEach(iterator, context); } else if (obj.length === +obj.length) { // 對[數組]中每一個元素執行處理器方法 for (var i = 0, length = obj.length; i < length; i++) { if (iterator.call(context, obj[i], i, obj) === breaker) return; } } else { // 對{對象}中每一個元素執行處理器方法 var keys = _.keys(obj); for (var i = 0, length = keys.length; i < length; i++) { if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return; } } };
函數思路:如果宿主支援原生的forEach方法,那就是直接調用原生的,如果不支援就走遍曆方式,(一般為瀏覽器或node.js支援原生的forEach方法)。
這裡有一個判斷方式很少見,obj.length === +obj.length,稱之為鴨式辯型的判斷方式。
underscore.js依賴庫函數分析一