首页 > 代码库 > underscore.js依赖库函数分析一

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

 

 

    

underscore.js依赖库函数分析一