2012-11-06 11 views

उत्तर

22

दो बराबर करने का इरादा कर रहे हैं

class User extends Backbone.Model 

अलग है। Backbone.js changelog को उद्धृत करने के लिए:

0.3.0: बैकबोन कक्षाओं को अब कॉफीस्क्रिप्ट कक्षाओं द्वारा विरासत में विरासत में प्राप्त किया जा सकता है।

दोनों CoffeeScript के Child extends Parent और रीढ़ की Child = Parent.extend() तीन महत्वपूर्ण बातें करते हैं:

  1. (सबसे महत्वपूर्ण) वे new ctor, जहां ctor एक समारोह जिसका प्रोटोटाइप Parent.prototype है करने के लिए Child.prototype निर्धारित किया है। यह प्रोटोटाइप विरासत स्थापित करता है।
  2. वे Child पर Parent की स्थिर गुणों की प्रतिलिपि बनाते हैं।
  3. उन्होंने Child.__super__ = Parent सेट किया। यह मुख्य रूप से Child के तरीकों में कॉफीस्क्रिप्ट के रूबी-जैसे super कीवर्ड का समर्थन करने के लिए है।
2

कुछ अंतर हैं। यदि आप बैकबोन की 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() का उपयोग करूंगा। फिर जब आपके पास एक विशेष मामला है जो कॉफ़ीस्क्रिप्ट क्लास सिंटैक्स का उपयोग करना अच्छा होगा, तो आगे बढ़ें और इसका उपयोग करें ... कम से कम

+1

कॉफीस्क्रिप्ट इसे संकलित करते समय कोड अनुकूलित करता है, हालांकि परिणामस्वरूप फ़ाइल कुछ और वर्ण हो सकती है जो कॉफीस्क्रिप्ट 'कक्षा' का उपयोग नहीं करते हैं, आमतौर पर अधिक कुशलतापूर्वक निष्पादित करते हैं? – rudolph9

संबंधित मुद्दे