利用CoffeeScript extends
與Backbone.js extend
之間的根本區別是什麼?利用CoffeeScript`extends`與Backbone.js`extend`之間的根本區別`
例如,如何是
class User extends Backbone.Model
不同於
User = Backbone.Model.extend()
利用CoffeeScript extends
與Backbone.js extend
之間的根本區別是什麼?利用CoffeeScript`extends`與Backbone.js`extend`之間的根本區別`
例如,如何是
class User extends Backbone.Model
不同於
User = Backbone.Model.extend()
兩個旨在是等價的。引用Backbone.js更新日誌:
0.3.0:Backbone類現在可以通過CoffeeScript類無縫地繼承。
兩個CoffeeScript中的Child extends Parent
和骨幹Child = Parent.extend()
做三個重要的事情:
Child.prototype
到new ctor
,其中ctor
是一個函數,其原型是Parent.prototype
。這確立了原型繼承。Parent
的所有靜態屬性到Child
。Child.__super__ = Parent
。這主要是爲了在Child
的方法中支持CoffeeScript的類似Ruby的super
關鍵字。有一些差異。如果您使用Backbone的extend()
方法,則會失去CoffeeScript的語法糖類,如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);
};
coffeescript類的缺點依賴在組織和編譯代碼的方式上,每個類可以在編譯後的JavaScript中將CoffeeScript的__extends()
函數附加到類定義的頂部。這種重複數十倍的代碼可以大大增加您的文件。尤其如果使用一個將你的代碼包裝在common.js模塊中的框架,
所以我會使用Backbone的extend()
默認爲精益編譯的代碼。然後,當你有一個特殊的情況,這將是很好的使用coffeescript類語法,然後繼續使用它... 節省。
CoffeeScript在編譯代碼時優化了代碼,雖然生成的文件可能稍多些字符不會使用CoffeeScript'class'通常會更高效地執行? – rudolph9