关于underscore.js源码的一些理解与笔记

Feb 13, 2015

623

在公司接触到的一些项目中,用到了underscore.js,但一直没时间去研究underscore.js的源码。临近过年,闲散时间多了一些,便看了underscore.js的源码,顺便把自己的一些理解记录下来。

1、_采用强制new模式,自调用构造函数

我们先来看一个例子:

function Person()
{
  this.name = "wen";
}

Person.prototype.age = 25;

var p1 = new Person(); //object
var p2 = Person(); //undefined
console.log(p1.age); //25
console.log(window.name); //wen

p2在调用构造函数时没有使用new操作符,会产生不同的结果,并且name会被添加到全局变量中,同时p2也没有原型链中的属性。(注:ES5严格模式下this并不会指向全局对象)。

我们看一下underscore中的处理,首先检测obj是否是_的实例,如果是直接返回obj,否则继续检查this对象是否是_的实例,如果不是,用new操作符实例_并返回。

代码如下:

var _ = function(obj) {
  if (obj instanceof _) return obj;
  if (!(this instanceof _)) return new _(obj);
  this._wrapped = obj;
};

这样做的好处就是能够保证我们调用的_对象不会丢失掉原型的链接,并且在没有使用new操作符时也能正常工作。

Wen's Blog

文章归档 » 文章标签 » 博主:吴文伟,Web开发爱好者,专注于前端开发,该博客用于记录和分享平时遇到的一些问题以及知识。

订阅

联系方式

链接