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,称之为鸭式辩型的判断方式。

 

 

    

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。