Ci sono alcune differenze. Se utilizzi il metodo extend()
di Backbone, perdi lo zucchero sintattico della classe CoffeeScript come super
e le proprietà/metodi statici.
Model = Backbone.Model.extend
set: (attrs, options) ->
super
che compila a (non corretta) ...
var Model;
Model = Backbone.Model.extend({
set: function(attrs, options) {
return set.__super__.constructor.call(this, arguments);
}
});
È possibile utilizzare eccellente in questo modo però:
Model = Bakbone.Model.extend()
Model::set = ->
super
che compila al (corretto) ...
var Model;
Model = Backbone.Model.extend();
Model.prototype.set = function() {
return Model.__super__.set.apply(this, arguments);
};
Lo svantaggio delle classi coffeescript, dipende su come organizzi e compili il tuo codice, ogni classe potrebbe avere la funzione __extends()
di CoffeeScript aggiunta alla parte superiore della definizione della classe nel javascript compilato. Questo extra bit di codice duplicato decine di volte può considerevolmente gonfiare i tuoi file. Particolarmente vero se si utilizza un framework che avvolge il codice nei moduli common.js.
Quindi, per impostazione predefinita utilizzare il dorsale extend()
di Backbone per codice compilato snello. Quindi, quando hai un caso speciale che sarebbe bello usare la sintassi della classe coffeescript, allora vai avanti e usalo ... con parsimonia.
fonte
2013-01-29 20:29:30
CoffeeScript ottimizza il codice quando lo compila, anche se il file risultante potrebbe essere leggermente più caratteri che non userebbe la classe Class di CoffeeScript generalmente eseguita in modo più efficiente? – rudolph9