[英]Fundamental differences between utilizing CoffeeScript `extends` vs. Backbone.js `extend`
使用CoffeeScript extends
與Backbone.js extend
之間的根本區別是什么?
例如,怎么樣
class User extends Backbone.Model
不同於
User = Backbone.Model.extend()
這兩者是相同的。 引用Backbone.js更改日志:
0.3.0:CoffeeScript類現在可以無縫地繼承Backbone類。
CoffeeScript的Child extends Parent
和Backbone的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);
}
});
你可以使用super這種方式:
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類的缺點,取決於你如何組織和編譯代碼,每個類可以將CoffeeScript的__extends()
函數附加到編譯的javascript中類定義的頂部。 這些額外的代碼重復數十次可以大大增加你的文件。 如果使用在common.js模塊中包裝代碼的框架,尤其如此。
所以我默認使用Backbone的extend()
來編譯精簡代碼。 然后當你有一個特殊的情況,使用coffeescript類語法會很好,然后繼續使用它...... 謹慎 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.