来自带注释的源代码:
var _ = function(obj) {
if (obj instanceof _) return obj;
if (!(this instanceof _)) return new _(obj);
this._wrapped = obj;
};
我很难通过“创建一个安全的引用”来理解Jeremy的意思,而且我并不是100%确定该代码正在做什么。
为什么不这样做:var _ = {}
? obj
参数来自何处?为什么我们必须检查 instanceof ?如果新运算符不是 instaneof ,为什么要返回?私有变量 _wrapped 的目的是什么?
答案 0 :(得分:1)
通过“安全引用”,作者表示不会在下划线闭包之外修改的引用。请注意,下划线文档还提到has
docs 使用hasOwnProperty
的“安全引用”,“如果它被意外覆盖。”
您询问的代码是由chaining文档中描述的行为推动的。 Underscore支持两种使用方式:
_.isEmpty(obj)
_(obj).isEmpty()
面向对象的样式调用_(obj)
,它返回一个新的_
对象,再次调用_(obj)
作为构造函数。当_
用作构造函数时,this
引用新创建的对象,因此最后一行代码执行,保存对新_
对象包装的值的引用。 / p>
换句话说,_
是一个函数,一个对象和一个构造函数。