underscore.js 源码阅读_ 总结1

underscore.js 是一个用于扩展原生javascript功能和不足的第三方库,它提供的功能还是很基础,但是建起高楼大厦离不开它脚下的基石。backbone.js是一个mvc框架,就是依赖这个库。更多信息,参考underscore官网,也有翻译的中文文档

源码注释中文翻译

立即函数和闭包

整个underscore.js文件就是一个立即函数,它定义了一个函数并且立即执行:

(function(){
    //...
    //_=function(){...};
    //...
}.call(this));

在这个立即函数中有很多的局部变量内部函数, 它们只能作用域只在这个立即函数, 这样做的好处是隐藏了一些库功能的内部实现、减少全局变量的污染、实现私有变量。如实现一个生成唯一id的方法:

(function(){
    //...
     var idCounter = 0;                   //定义变量,这个变量在立即函数执行完成后不能被访问
    _.uniqueId = function(prefix) {      //生成id的函数(闭包)
    var id = ++idCounter + '';
    return prefix ? prefix + id : id;
  };
    //...
}.call(this));

仅当我们使用_.uniqueId()这个方法时, 才能修改idCounter的值, 这样就保证了我们产生的id是唯一的

_.noConflict()

在很多库中比如jQuery, 一般情况下我们使用$作为JQ对象, 但是如果你还需要用例外一个库, 但是这个库也是用$作为该库的全局对象, 那么如何解决这样的冲突?

一般的库中都有noConflict()这个解决命名冲突的问题, 那么它是怎么样的原理?

_.noConflict()这个函数的功能是恢复原来的window._对象, 并返回Underscore对象的引用

实现原理:

var previousUnderscore = root._;  //程序一开始就记录window._对象
...
root._ = _;                 // 将_对象赋值给window._变量        
...
_.noConflict = function() {
    root._ = previousUnderscore;  //还原原来的window._对象
    return this;                  //返回underscore对象
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,353评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,323评论 25 709
  • 拒绝思维懒惰,习惯于深度思考,永远不要用战术上的勤奋掩盖战略上的懒惰. 有能力的人绝对不习惯于加班,不懂得深度思考...
    CharmingM9阅读 1,405评论 0 1
  • 普通的文件上传,文件上传 必须在form表单里面添加 enctype='multipart/form-data'。...
    西贝巴巴阅读 3,887评论 0 0

友情链接更多精彩内容