当我查看Underscore
中的代码时:http://underscorejs.org/docs/underscore.html
我遇到了
var _ = function(obj) {
if (obj instanceof _) return obj;
if (!(this instanceof _)) return new _(obj);
this._wrapped = obj;
};
带评论
创建对Underscore对象的安全引用,以供下面使用。
我真的不明白这个目的。而不是
(function() {
var _ = function(obj) {
if (obj instanceof _) return obj;
if (!(this instanceof _)) return new _(obj);
this._wrapped = obj;
};
_.VERSION = '1.7.0';
})();
为什么我们不能简单地拥有
(function() {
var _ = {};
_.VERSION = '1.7.0';
})();
我是否知道为什么Underscore
项目使用的技术背后的想法?
答案 0 :(得分:2)
这会强制使用构造函数模式创建对象:_()
等同于new _()
然后,如果要扩展所有实例的行为,即使用_(obj)
创建的对象(或new _(obj)
,内存使用量有限,则可以扩展构造函数的原型。
function Ctor(){}
Ctor.prototype.someFunction=function(){};
var instance1=new Ctor();
var instance2=new Ctor();
会以某种方式等同于
function factory(){
var obj={};
obj.someFunction=function(){}
return obj;
}
var instance1=factory();
var instance2=factory();
但第二个版本将使用更多内存,因为它会将函数添加到每个实例而不是单个通用原型