1. // 整个underscore的实现包在一个立即执行函数中,避免污染全局对象
  2. // 通过call(this)来入全局变量
  3. (function() {
  4. // 缓存this
  5. var root = this;
  6. // 保存原始的“_”变量
  7. var previousUnderscore = root._;
  8.  
  9. // Array,Object,Function这些都是函数,通过局部变量保存原型属性prototype也是为了方便压缩
  10. var ArrayProto = Array.prototype, ObjProto = Object.prototype;
  11. var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
  12.  
  13. // 通过局部变量创建prototypes的快速索引,减少原型链查找
  14. var push = ArrayProto.push,
  15. slice = ArrayProto.slice,
  16. toString = ObjProto.toString,
  17. hasOwnProperty = ObjProto.hasOwnProperty;
  18.  
  19. // 所有希望用到的ECMAScript 5原生的函数,在原生判断函数不存在的情况下,后面会进行重写
  20. var nativeIsArray = Array.isArray,
  21. nativeKeys = Object.keys,
  22. nativeCreate = Object.create;
  23.  
  24. // 创建一个Ctor局部变量,避免后面每次创建function F(){}这个匿名函数
  25. var Ctor = function(){};
  26.  
  27. // 定义`_`函数对象,用来生产`_`实例对象
  28. var _ = function(obj) {
  29. if (obj instanceof _) return obj;
  30. if (!(this instanceof _)) return new _(obj);
  31. this._wrapped = obj;
  32. };
  33.  
  34. if (typeof exports != 'undefined' && !exports.nodeType) {
  35. if (typeof module != 'undefined' && !module.nodeType && module.exports) {
  36. exports = module.exports = _;
  37. }
  38. exports._ = _;
  39. } else {
  40. root._ = _;
  41. }
  42.  
  43. // 版本号
  44. _.VERSION = '1.8.3';
  45.  
  46. // 各种内部函数
  47. // ......
  48.  
  49. // 各种公开的静态函数,例如:Collection Functions,Array Functions,Function (ahem) Functions等等
  50. // ......
  51.  
  52. // 实例方法和属性
  53. _.prototype.value = function() {
  54. return this._wrapped;
  55. };
  56.  
  57. // Provide unwrapping proxy for some methods used in engine operations
  58. // such as arithmetic and JSON stringification.
  59. _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
  60.  
  61. _.prototype.toString = function() {
  62. return String(this._wrapped);
  63. };
  64.  
  65. // 支持AMD
  66. if (typeof define == 'function' && define.amd) {
  67. define('underscore', [], function() {
  68. return _;
  69. });
  70. }
  71. }.call(this));

underscore.js 源码阅读 一 整体结构的更多相关文章

  1. underscore.js 源码阅读 准备

    本次阅读是初次阅读源码,参考了以下几篇文章: https://github.com/hanzichi?language=javascript&page=5&tab=stars http ...

  2. underscore.js 源码

    underscore.js 源码 underscore]JavaScript 中如何判断两个元素是否 "相同" Why underscore 最近开始看 underscore.js ...

  3. Underscore.js 源码学习笔记(下)

    上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...

  4. underscore.js源码研究(5)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  5. underscore.js源码解析(二)

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

  6. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  7. underscore.js源码研究(8)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  8. underscore.js源码研究(7)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  9. underscore.js源码研究(6)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

随机推荐

  1. [UWP]如何使用Fluent Design System (上)

    1. 前言 微软在Build 2017中公布了新的设计语言Fluent Design System(以下简称FDS),不过官网只是堆砌了各种华丽的词语以及一堆动画.至于在UWP中要做成怎么样,怎么做, ...

  2. hadoop的安装和配置(三)完全分布式模式

    博主会用三篇文章为大家详细说明hadoop的三种模式: 本地模式 伪分布模式 完全分布模式 完全分布式模式: 前面已经说了本地模式和伪分布模式,这两种在hadoop的应用中并不用于实际,因为几乎没人会 ...

  3. kotlin的方言(语法糖)

    概述 之前介绍了kotlin的快速入门,http://www.cnblogs.com/lizo/p/7231167.html 大多数还是参照java.kotlin中提供了更多更方便的语言特性 这个方言 ...

  4. [Spark内核] 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等

    本課主題 Spark Worker 原理 Worker 启动 Driver 源码鉴赏 Worker 启动 Executor 源码鉴赏 Worker 与 Master 的交互关系 [引言部份:你希望读者 ...

  5. iOS中 学会如何对sqlite3 进行封装 (纯手工)

    #waring ---(看官注意) ---使用说明: ①在创建自定义model类之前让该类继承自文件中的Model类, ②为model类选一个NSString属性作为主键:(既,在初始化方法里面将从父 ...

  6. wn-cli 像React组件开发一样来开发微信小程序

    项目地址:wn-cli wn-cli wn-cli 像React组件开发一样来开发微信小程序 名字由来:wn -> weapp native 取第一个字母 Install npm install ...

  7. 【译】巧用CSS变量实现自动前缀

    转:https://www.h5jun.com/post/autoprefixing-with-css-variables-lea-verou.html 最近,当我在制作 markapp.io 这个小 ...

  8. vijos 1557:bzoj:1413: [ZJOI2009]取石子游戏

    Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...

  9. bzoj:2331: [SCOI2011]地板

    Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板.现在小L想知道,用 ...

  10. BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】

    2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1326  Solved: 815[Submit][Stat ...