2012-02-01 9 views
58

मैं जे एस के लिए नया हूँ और रीढ़नई Backbone.Model() बनाम Backbone.Model.extend()

क्या इन दोनों के बीच क्या अंतर है?

var model = new TestModel(); 

हालांकि extend को title गुजर एक अलग अर्थ है:

TestModel = new Backbone.Model({ title: "test title" }) 
TestModel = Backbone.Model.extend({ title: "test title" }) 

उत्तर

74

एक बुनियादी अंतर है, संक्षेप में "के रूप में अंतर वर्णित किया जा सकता है जो नहीं है एक घर और घर की परियोजना के बीच "।

विशेषज्ञ प्रोग्रामर के लिए मैं बस यही कहूंगा कि "नए Backbone.Model" एक वस्तु उदाहरण देता है, लेकिन "Backbone.Model.extend" एक निर्माता फ़ंक्शन

सबसे पहले: एक नई वस्तु (घर यानी)

var TestModel = new Backbone.Model({ title: "test title" }); 

आप एक नया वस्तु जिसका संरचना (तरीकों और वैरिएबल) कहीं और परिभाषित किया गया है पैदा करते हैं। ऑब्जेक्ट को एक भाषा के "सभी गैर-मूल वस्तु" के रूप में माना जा सकता है, जहां "मूल वस्तु" के लिए मेरा मतलब है कि मूल प्रकार जैसे पूर्णांक, वर्ण इत्यादि।

ब्रेसिज़ में {} आप कुछ चर के मान को पास करते हैं या तरीका। इसे कहा जाता है, क्योंकि टॉमसज़ नुर्कविच ने पहले एक रचनाकार समझाया था, क्योंकि यह आपको एक नई वस्तु 'निर्माण' करने की अनुमति देता है जिसका मॉडल कहीं और वर्णित किया गया है।

आप एक ज्ञात उदाहरण के लिए: यदि आप लिखना

var myArray = new Array(); 

इसका मतलब है कि आप एक नया सरणी है, जो एक गैर देशी वस्तु जो कहीं और परिभाषित किया गया है है बना रहे हैं। आप यह भी लिख सकते हैं:

var myArray = new Array([1,2,3,4,5]); 

और यह दिए गए नंबरों के साथ सरणी भरता है।

दूसरा: किसी मौजूदा ऑब्जेक्ट की परिभाषा को संशोधित (अर्थातघर के परियोजना)

var TestModel = Backbone.Model.extend({ title: "test title" }) 

साथ

आप बहुत ही सरल कुछ अपने वी एम के लिए कहते हैं: "वस्तु आप मुझे दे के रूप में डिफ़ॉल्ट बहुत अच्छा है, लेकिन मैं और अधिक कार्य/गुण लागू करना चाहते हैं" । तो "विस्तार" खंड के साथ आप किसी ऑब्जेक्ट की परिभाषा को मौजूदा विधि/गुणों को जोड़ या ओवरराइड करते हैं।

उदाहरण: backbone.js में एक अच्छा उदाहरण संग्रह के तुलनित्र कार्य द्वारा दिया जाता है। जब आप इसे परिभाषित करने वाले ऑब्जेक्ट को बढ़ाते हैं, "इसका उपयोग क्रमबद्ध क्रम में संग्रह को बनाए रखने के लिए किया जाएगा"।

उदाहरण:

myCollection = Backbone.Collection.extend({ 
    comparator:function(){ 
     return item.get('name'); 
    } 
}); 

सामान्य में

आप जब 'backboning' (उदाहरण के एक दृश्य के लिए दिए गए वस्तु का विस्तार करने (backbone.js ढांचे का उपयोग कर विकसित करने) करने की उम्मीद कर रहे हैं क्या) के साथ:

window.ButtonView = Backbone.View.extend({ 
    btnText:'nothingByDefault', 
    myNewMethod:function(){ 
     //do whatever you want, maybe do something triggered by an event, for instance 
    } 
}); 

और फिर कोड में कहीं और इसका उपयोग करें, एक बार प्रत्येक बटन के लिए जिसे आप संभालना चाहते हैं, ब्रेस में रूपक (एक घर घर में ही बनाम की परियोजना) के लिए सभी मूल्यों आप वस्तु

[...] 
var submitBtn = new ButtonView({btnText:"SubmitMe!"}), 
var cancelBtn = new ButtonView({btnText:"Erase All!"}); 

.... आशा है कि इस मदद करता है करने के लिए देना चाहता हूँ ...

+12

+1 कर सकते है :) –

+3

आप कहते हैं कि "विस्तार" के साथ आप एक प्रोटोटाइप बनाते हैं, और "नया" के साथ आप प्रोटोटाइप से ऑब्जेक्ट बनाते हैं ?! – netfed

14

दूसरे मामले TestModel में एक contructor आप बाद में कई बार उपयोग कर सकते हैं कि कौन सा मॉडल का एक उदाहरण बनाने के लिए है। आप शायद का उपयोग करना चाहिए:

var TestModel = Backbone.Model.extend({defaults: { title: "test title" }}); 

या पारित मॉडल जिम्मेदार बताते हैं जब एक वस्तु बनाने:

var model = new TestModel({ title: "test title" }); 

दूसरी ओर TestModel पर पहले मामले में पहले से ही (मॉडल का एक उदाहरण इसलिए यह नाम दिया जाना चाहिए है testModel जावास्क्रिप्ट नामकरण परंपरा का पालन करने के):

var testModel = new Backbone.Model({ title: "test title" }) 
संबंधित मुद्दे