你的位置:首页 > 软件开发 > Java > underscore.js源码解析(二)

underscore.js源码解析(二)

发布时间:2016-02-27 11:00:05
前几天我对underscore.js的整体结构做了分析,今天我将针对underscore封装的方法进行具体的分析,代码的一些解释都写在了注释里,那么废话不多说进入今天的正文。没看过上一篇的可以猛戳这里:underscore.js源码解析(一)underscore.js源码GitH ...

前几天我对underscore.js的整体结构做了分析,今天我将针对underscore封装的方法进行具体的分析,代码的一些解释都写在了注释里,那么废话不多说进入今天的正文。

没看过上一篇的可以猛戳这里:underscore.js源码解析(一)

underscore.js源码GitHub地址: https://github.com/jashkenas/underscore/blob/master/underscore.js

本文解析的underscore.js版本是1.8.3

_.each

 1  _.each = _.forEach = function(obj, iteratee, context) { 2   //optimizeCb( )是underscore内部用来执行函数的很重要的方法,这个我们后面再聊 3   iteratee = optimizeCb(iteratee, context); 4   var i, length; 5   if (isArrayLike(obj)) { 6    //数组 7    for (i = 0, length = obj.length; i < length; i++) { 8     iteratee(obj[i], i, obj); 9    }10   } else {11    //对象处理,这个_.keys( )我们也后面再聊12    var keys = _.keys(obj);13    for (i = 0, length = keys.length; i < length; i++) {14     iteratee(obj[keys[i]], keys[i], obj);15    }16   }17   return obj;18  };
在介绍_.matcher之前,需要先介绍一下createAssigner 和_.isMatch。

createAssigner

 1 var createAssigner = function(keysFunc, defaults) { 2   return function(obj) { 3    var length = arguments.length; 4    //判断是否是对象 5    if (defaults) obj = Object(obj); 6    //如果一个参数或者对象为空,则返回这个对象 7    if (length < 2 || obj == null) return obj; 8    //从第二个参数开始 9    for (var index = 1; index < length; index++) {10     var source = arguments[index],11       //获取对应的keys12       //keysFunc只有keys和allKeys两种,在下面_.extend和_.extendOwn中可以看到13       keys = keysFunc(source),14       l = keys.length;15     //进行拷贝处理16     for (var i = 0; i < l; i++) {17      var key = keys[i];18      //defaults是为了对defaults做单独处理而添加的参数,具体的解释_.defaults里做详细分析19      //在_.extend和_.extendOwn中default没有传值所以是underfinded,所以下面判断条件横为true,正常进行拷贝处理20      if (!defaults || obj[key] === void 0) obj[key] = source[key];21     }22    }23    return obj;24   };25  };

 _.matcher和_.matches

1 // 判断对象是否匹配attrs的属性2  _.matcher = _.matches = function(attrs) {3   //进行拷贝4   attrs = _.extendOwn({}, attrs);5   return function(obj) {6    //用来判断该属性是否在对象中,上文有提及7    return _.isMatch(obj, attrs);8   };9  };

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:underscore.js源码解析(二)

关键词:JS

JS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。