优化JavaScript构造函数

May 6, 2015

445

之前写过一篇文章《关于underscore.js源码的一些理解与笔记》,里面涉及到的自调用构造函数,代码如下:

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

这段代码不管以函数的方式或者是以构造函数的方式调用,都会返回一个继承 _.prototype 的对象。但这种模式有一个缺点,使用函数调用时,需要额外的函数调用,代价比较高。可以通过以下代码来验证:

var _ = function(obj) {
  console.log('create_');
  if (obj instanceof _) return obj;
  if (!(this instanceof _)) {
    console.log('new_');
    return new _(obj);
  }
  this._wrapped = obj;
  console.log('wrapped_');
},
a = _(), //log: create_ new_ create_ wrapped_
b = new _(); //log: create_ wrapped_

那么,我们该如何来优化这种方式呢?

Wen's Blog

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

订阅

联系方式

链接