Inheritance 使用CoffeeScript`extend`与主干.js`extend的根本区别`
使用CoffeeScriptInheritance 使用CoffeeScript`extend`与主干.js`extend的根本区别`,inheritance,backbone.js,coffeescript,Inheritance,Backbone.js,Coffeescript,使用CoffeeScriptextends与使用Backbone.jsextend之间的根本区别是什么 例如,它是如何工作的 class User extends Backbone.Model 不同于 User = Backbone.Model.extend() 这两个概念是等效的。引用Backbone.js changelog: 0.3.0:主干类现在可以无缝地由CoffeeScript类继承 CoffeeScript的Child扩展Parent和Backbone的Child=Parent
extends
与使用Backbone.jsextend
之间的根本区别是什么
例如,它是如何工作的
class User extends Backbone.Model
不同于
User = Backbone.Model.extend()
这两个概念是等效的。引用Backbone.js changelog: 0.3.0:主干类现在可以无缝地由CoffeeScript类继承 CoffeeScript的
Child扩展Parent
和Backbone的Child=Parent.extend()
都做了三件重要的事情:
Child.prototype
设置为new-ctor
,其中ctor
是一个函数,其原型为Parent.prototype
。这建立了原型遗传子项。这主要是为了在Child
的方法中支持CoffeeScript类似Ruby的super
关键字
有一些区别。如果您使用主干的
extend()
方法,您将失去CoffeeScript的类语法糖,如super
和静态属性/方法
Model = Backbone.Model.extend
set: (attrs, options) ->
super
编译为(不正确)
您可以通过以下方式使用super:
Model = Bakbone.Model.extend()
Model::set = ->
super
编译为(正确的)
coffeescript类的缺点是,根据您组织和编译代码的方式,每个类都可以将coffeescript的\u extends()
函数附加到已编译javascript中的类定义顶部。这段额外的代码重复了几十次,可以大大增加您的文件。如果使用将代码封装在common.js模块中的框架,尤其如此
因此,对于精简编译代码,我默认使用主干的
extend()
。然后,当您有一个特别的情况,最好使用coffeescript类语法,然后继续使用它。。。节省。CoffeeScript在编译代码时会优化代码,尽管生成的文件可能会稍微多一些字符,但使用CoffeeScriptclass
通常不会执行得更有效吗?
Model = Bakbone.Model.extend()
Model::set = ->
super
var Model;
Model = Backbone.Model.extend();
Model.prototype.set = function() {
return Model.__super__.set.apply(this, arguments);
};