为了提高自己的JavaScript
姿势水平,也是在很多人的推荐下,决定阅读Underscore源码。
结构
阅读的源码版本为v1.8.2
代码分析
1 | (function () { |
整个库被写在一个闭包里面,以免受到别的全局变量的影响。
1 | var root = this; |
创建root变量 保存this对象 在浏览器中使用时为window对象 在服务器为exports对象
1 | var previousUnderscore = root._; |
如果root对象下的_变量有值,那么将其存起来
1 | var ArrayProto = Array.prototype, |
将以上对象的原型保存到变量中,方便后期进行uglify生成minified版本
1 | var push = ArrayProto.push, |
创建参考,方便直接使用对象的原型方法
1 | var nativeIsArray = Array.isArray, |
声明将要用到的ES5原生方法
1 | var Ctor = function () {}; |
可复用的构造函数用来设置原型
1 | var _ = function (obj) { |
创建_变量来作为underscore对象的引用
1 | if (typeof exports !== 'undefined') { |
在nodejs环境下用module.exports导出underscore对象 同时还向后兼容require()方法,如果是浏览器环境,则将_作为一个全局变量。
1 | _.VERSION = 'x.x.x' |
保存版本信息