कॉफीस्क्रिप्ट extends
बनाम बैकबोन.जेएस extend
का उपयोग करने के बीच मौलिक मतभेद क्या हैं?कॉफीस्क्रिप्ट 'विस्तार' बनाम बैकबोन.जेएस 'विस्तार'
उदाहरण के लिए, कैसे से
User = Backbone.Model.extend()
कॉफीस्क्रिप्ट extends
बनाम बैकबोन.जेएस extend
का उपयोग करने के बीच मौलिक मतभेद क्या हैं?कॉफीस्क्रिप्ट 'विस्तार' बनाम बैकबोन.जेएस 'विस्तार'
उदाहरण के लिए, कैसे से
User = Backbone.Model.extend()
दो बराबर करने का इरादा कर रहे हैं
class User extends Backbone.Model
अलग है। Backbone.js changelog को उद्धृत करने के लिए:
0.3.0: बैकबोन कक्षाओं को अब कॉफीस्क्रिप्ट कक्षाओं द्वारा विरासत में विरासत में प्राप्त किया जा सकता है।
दोनों CoffeeScript के Child extends Parent
और रीढ़ की Child = Parent.extend()
तीन महत्वपूर्ण बातें करते हैं:
new ctor
, जहां ctor
एक समारोह जिसका प्रोटोटाइप Parent.prototype
है करने के लिए Child.prototype
निर्धारित किया है। यह प्रोटोटाइप विरासत स्थापित करता है।Child
पर Parent
की स्थिर गुणों की प्रतिलिपि बनाते हैं।Child.__super__ = Parent
सेट किया। यह मुख्य रूप से Child
के तरीकों में कॉफीस्क्रिप्ट के रूबी-जैसे super
कीवर्ड का समर्थन करने के लिए है।कुछ अंतर हैं। यदि आप बैकबोन की extend()
विधि का उपयोग करते हैं, तो आप super
और स्थिर गुण/विधियों जैसे कॉफीस्क्रिप्ट की कक्षा वाक्य रचनात्मक चीनी पर हार जाते हैं।
Model = Backbone.Model.extend
set: (attrs, options) ->
super
जो (गलत) को संकलित करता है ...
var Model;
Model = Backbone.Model.extend({
set: function(attrs, options) {
return set.__super__.constructor.call(this, arguments);
}
});
आप सुपर इस तरह से उपयोग कर सकें:
Model = Bakbone.Model.extend()
Model::set = ->
super
जो (सही) के लिए संकलित ...
var Model;
Model = Backbone.Model.extend();
Model.prototype.set = function() {
return Model.__super__.set.apply(this, arguments);
};
कॉफ़ीस्क्रिप्ट कक्षाओं पर निर्भरता, निर्भर एनजी कैसे आप अपना कोड व्यवस्थित और संकलित करते हैं, प्रत्येक वर्ग में संकलित जावास्क्रिप्ट में कक्षा परिभाषा के शीर्ष पर संलग्न कॉफीस्क्रिप्ट का __extends()
फ़ंक्शन हो सकता है। दर्जनों बार डुप्लिकेट किए गए कोड का यह अतिरिक्त बिट आपकी फाइलों को काफी गुब्बारा कर सकता है। विशेष रूप से सच है कि एक फ्रेमवर्क का उपयोग करना जो आपके कोड को common.js मॉड्यूल में लपेटता है।
तो मैं दुबला संकलित कोड के लिए डिफ़ॉल्ट रूप से बैकबोन के extend()
का उपयोग करूंगा। फिर जब आपके पास एक विशेष मामला है जो कॉफ़ीस्क्रिप्ट क्लास सिंटैक्स का उपयोग करना अच्छा होगा, तो आगे बढ़ें और इसका उपयोग करें ... कम से कम।
कॉफीस्क्रिप्ट इसे संकलित करते समय कोड अनुकूलित करता है, हालांकि परिणामस्वरूप फ़ाइल कुछ और वर्ण हो सकती है जो कॉफीस्क्रिप्ट 'कक्षा' का उपयोग नहीं करते हैं, आमतौर पर अधिक कुशलतापूर्वक निष्पादित करते हैं? – rudolph9