阅读underscore源码笔记

转载 2015年07月08日 10:41:47
nderscorejs,一个实用的的Javascript函数库,值得推荐,官网地址Github仓库有注释的源码
  • obj.length === +obj.length 判断obj.length是不是一个数字,“+”会吧非number类型的值尝试转换为number类型,如果失败返回NAN。
  • void 0 这个相信大家经常见,但是你明白它是做什么的吗?而且我们遇到的情况大多都是在超链接里写着Javascript:(void 0),现在我又遇到了a === void 0,好吧,不买官子了,其实这个是用来防止undefined被重置(关于这一点可以点击这里查看),而void是一个修饰参数的前缀关键字,并且永远返回undefined,因此在超链接里使用void 0就清晰了,返回undefined就阻止了a标签的默认事件。例如:
1
2
3
4
5
void 0
void (0)
void "hello"
void (new Date())
//都将返回undefined

为什么使用0,我只想说呵呵,谁让0最短小可爱呢。

  • ECMAScript5中的bind,underscore的实现方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var nativeBind = FuncProto.bind;
var Ctor = function(){};
_.bind = function(func, context) {
  var args, bound;
  if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, Array.prototype.slice.call(arguments, 1));
  if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
  args = Array.prototype.slice.call(arguments, 2);
  bound = function() {
    if (!(this instanceof bound)) return func.apply(context, args.concat(Array.prototype.slice.call(arguments)));
    Ctor.prototype = func.prototype;
    var self = new Ctor;
    Ctor.prototype = null;
    var result = func.apply(self, args.concat(Array.prototype.slice.call(arguments)));
    if (_.isObject(result)) return result;
    return self;
  };
  return bound;
};

  bind很多人不明白为什么在有了call和apply还是要出个bind,看完这段代码大家应该明白了吧,其实就是内存驻留版的apply(更多详情前点击这里)。

 

其实这个库结构很简单,但是却实现了很多实用的功能函数,下面在copy一段比较实用函数。

复制代码
 1 _.isEmpty = function(obj) {
 2   if (obj == null) return true;
 3   if (_.isArray(obj) || _.isString(obj) || _.isArguments(obj)) return obj.length === 0;
 4   for (var key in obj) if (_.has(obj, key)) return false;
 5   return true;
 6 };
 7 _.isElement = function(obj) {
 8   return !!(obj && obj.nodeType === 1);
 9 };
10 _.isArray = nativeIsArray || function(obj) {
11   return toString.call(obj) === '[object Array]';
12 };
13 _.isObject = function(obj) {
14   var type = typeof obj;
15   return type === 'function' || type === 'object' && !!obj;
16 };
17 _.isNaN = function(obj) {
18   return _.isNumber(obj) && obj !== +obj;
19 };
20 _.isBoolean = function(obj) {
21   return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
22 };
23 _.has = function(obj, key) {
24   return obj != null && hasOwnProperty.call(obj, key);
25 };
复制代码

Flask 源码阅读笔记

我觉得我已经养成了一个坏习惯,在使用一个框架过程中对它的内部原理非常感兴趣,有时候需要花不少精力才明白,这也导致了学习的缓慢,但换来的是对框架的内部机理的熟悉,正如侯捷所说,源码面前,了无秘密。这也是...
  • yueguanghaidao
  • yueguanghaidao
  • 2014年10月12日 12:32
  • 22979

《Linux内核完全剖析》阅读笔记

http://blog.csdn.net/songguozhi/article/details/3496455 我是通过阅读赵炯老师编的厚厚的linux内核完全剖析看完LINUX0.11的代码,不得...
  • fyh2003
  • fyh2003
  • 2016年01月04日 13:40
  • 4164

underscore.js 解读(敲源码)

我把第一遍敲的underscore的代码放在github上了,加上了备注和一些demo 感兴趣的可以去看看。 https://github.com/katoto/copyUnderscore 还有...
  • u010427666
  • u010427666
  • 2016年11月20日 22:51
  • 1561

underscore源码阅读整理

underscore是我阅读的第一份源码,这份代码比较小巧,只有1500行,我阅读的版本是1.8.3.underscore里封装了很多功能性的函数,和jQuery不同,我觉得jQuery的特点是对针对...
  • aimo_Doris
  • aimo_Doris
  • 2016年04月26日 15:36
  • 96

underscore.js源码解析之函数绑定

1. 引言  underscore.js是一个1500行左右的Javascript函数式工具库,里面提供了很多实用的、耦合度极低的函数,用来方便的操作Javascript中的数组、对象和函数,它支持函...
  • m0_37589327
  • m0_37589327
  • 2017年12月28日 10:42
  • 18

underScore 源码解析(一)---- 结构

underScore适用于各种环境  (function(){ //code 从这里开始 var root = this; }).call(this); 这个估计已经算标准做法了,...
  • shangyuanshi
  • shangyuanshi
  • 2013年01月02日 15:59
  • 548

Underscore.js 1.3.3 源码分析收藏

Underscore是一个提供许多函数编程功能的库,里面包含了你期待(在Prototype.js和Ruby中)的许多功能。但是没有扩展任何内置的Javascript对象,也就是说它没有扩展任何内置对象...
  • xuxiaoping1989
  • xuxiaoping1989
  • 2016年10月17日 10:08
  • 257

underscore.js 源码之 数组展开和数组去重

underscore.js 源码之 数组展开和数组去重
  • SecondLieutenant
  • SecondLieutenant
  • 2017年11月02日 11:33
  • 233

Underscore.js源码分析(一)

Underscore.js源码分析(一)  Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象。弥补了 j...
  • wcwz020140_
  • wcwz020140_
  • 2016年08月06日 17:51
  • 194

JS中判断相等的方法(underscore中eq方法源码分析)

原文地址:https://github.com/classicemi/blog/issues/7 最近编程遇见一个BUG,最后追查到原因,竟然就是对象相等判断有误,所以搜索相关资料,发现此篇好文...
  • zhiren2011
  • zhiren2011
  • 2016年02月14日 16:53
  • 1560
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:阅读underscore源码笔记
举报原因:
原因补充:

(最多只允许输入30个字)