以下Underscore.js代码如何工作?

时间:2013-11-11 03:11:46

标签: javascript underscore.js

来自带注释的源代码:

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

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

我很难通过“创建一个安全的引用”来理解Jeremy的意思,而且我并不是100%确定该代码正在做什么。

为什么不这样做:var _ = {}obj参数来自何处?为什么我们必须检查 instanceof ?如果运算符不是 instaneof ,为什么要返回?私有变量 _wrapped 的目的是什么?

1 个答案:

答案 0 :(得分:1)

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

您询问的代码是由chaining文档中描述的行为推动的。 Underscore支持两种使用方式:

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

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

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