2013-03-22 52 views
0

縱觀一些骨幹的例子,我看到一些簡單的模型是這樣的:定製骨幹結構對象

var Vehicle = Backbone.Model.extend(
{ 
    summary: function() { 
    return 'Vehicles move'; 
    } 

}); 

Vehicle = (function() { 
return Backbone.Model.extend({ 
    defaults: { 

    }, 

    initialize: { 

    } 
}); 

})(); 

編輯:(澄清) 我想知道,如果有人可以解釋定義骨幹對象的兩種方式之間的區別以及更傳統的方式。我知道他們內部沒有相同的方法,但我更關心第一個如何擴展骨幹模型,第二個方法是將它們封裝在閉包中。我不確定是否真的掌握了每種情況以及何時使用哪種模式。提前致謝!

+0

第一個具有一個簡易的方法,第二個沒有。不知道你是否在問別的東西。 – kinakuta 2013-03-22 04:59:28

回答

1

我會考慮更傳統的第一種形式,特別是因爲我甚至沒有在主要的Backbone.js網站上看到第二種形式。

要了解他們是如何做同樣的事情,首先注意Backbone.Model.extend()是也返回功能的功能:

> Backbone.Model.extend() 
    function() { return parent.apply(this, arguments); } 

所以變量Vehicle最終被設置爲一個功能這是你看它的一種模型構造器方法。不過,我認爲第二種形式更爲間接且不必要的複雜:它將Vehicle設置爲調用一個函數的結果,該函數本身只返回Backbone.Model.extend(),所以它只是一個更復雜的說同一事物的方式。

1

如果模型的所有屬性都很容易定義,建議使用模式1。但是,如果任何屬性執行起來很複雜,因此需要一個「私人」輔助函數,而不希望將其暴露在模型或全局對象中,最好使用閉合來隱藏它。也就是圖案2

爲例:

Vehicle = (function() { 

function helper1() {} //don't want to expose it 
function helper2() {} 

return Backbone.Model.extend({ 
    defaults: { 

    }, 

    initialize: { 

    } 

    summary: function() { 
     helper1(); 
     helper1(); 
    } 

}); 

})();