上次主要理解了_ 这个构造函数是怎么实现的
接下来详细的解构underscore的组织解构
解构
整体来说,就是创建一个_的构造函数(类),设置相应的属性 _wrapped(存储实例化是传入构造函数中的参数 obj),设置众多的静态方法,然后将静态方法也通过mixin方法添加到_.prototype源性对象上。
上代码
(function(){
var root = this;
//保存一个undefined
var previouseUnderscore = root._;
//缓存一些原型和变量
...
//构建_ 对象
var _ = function (obj){
//如果传入的值本身就是_的实例
if(obj instance of _){
return obj;
}
//如果返回值不是_的实例 那么实例化
if( !(this instance of _)) return new _(obj);
//设置_wrapped 属性
this._wrapped = obj;
//实现一个通用迭代器 _iteratee 函数
...
...
//设置众多的静态方法
_.each = _.forEach
_.map
_.reduce _.reduceRight
....
....
_.chain //实现链式调用的方法
_.mixin //将_的静态方法添加到了 _.prototype 对象上
_.mixin(_)
//添加数组方法到_.prototype上
...
//改写_.prototype上的value 和 toString toValue方法
}
})(this)
ok! 今天就这样 ,后续我们来具体看一些重要的方法实现和逻辑处理!