3

从带注释的源代码:

创建一个对 Underscore 对象的安全引用以供下面使用。

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

我很难理解 Jeremy 所说的“创建安全引用”是什么意思,而且我也不是 100% 确定该代码在做什么。

为什么不这样做:var _ = {}obj论点来自哪里,为什么我们必须检查instanceof?如果不是instaneof ,为什么要使用new运算符返回?私有变量_wrapped的目的是什么?

4

1 回答 1

1

通过“安全引用”,作者表示不会在下划线闭包之外修改的引用。请注意,下划线文档还提到hasdocs使用“安全引用”来hasOwnProperty“以防它被意外覆盖”。

您询问的代码是由链接文档中描述的行为所激发的。下划线支持两种使用方式:

  • 功能风格:_.isEmpty(obj)
  • 面向对象的风格:_(obj).isEmpty()

面向对象的风格调用_(obj),它返回一个新_对象,_(obj)作为构造函数再次调用。当_用作构造函数时,this引用新创建的对象,因此执行最后一行代码,保存对新_对象包装的值的引用。

换句话说,_是一个函数、一个对象和一个构造函数。

于 2013-11-15T05:07:07.163 回答