underscore.js依赖库函数分析一
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,称之为鸭式辩型的判断方式。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。