2014-11-04 155 views
0

用來當我通過代碼在Underscore一個安全的參考對象的技術:http://underscorejs.org/docs/underscore.html創建下劃線

我碰到

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

附帶評論

創建一個安全的參考下面使用的下劃線對象。

我真的不明白目的。而不必

(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項目?

回答

2

這種力量對象使用構造模式的創建:如果你想擴展的所有實例的行爲,即用_(obj)(或new _(obj)創建了一個有限的內存使用對象_()將相當於new _()

那麼你可以擴展構造函數的原型。

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(); 

但第二個版本將使用更多的內存,因爲它會將功能添加到每個實例,而不是添加到單個常見原型