Javascript Backbone.Model.extend()和X类extends Backbone.Model有什么区别?

Javascript Backbone.Model.extend()和X类extends Backbone.Model有什么区别?,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,在JavaScript中,我必须使用 Backbone.Model.extend() 为我的模型创建一个“类”。但在咖啡脚本中,我可以使用 class X extends Backbone.Model 二者之间有什么区别。有什么理由让我用一个代替另一个吗 一个简单的测试,看看有什么区别 我相信它没有显示所有的代码。。。但是extends()似乎稍微简单一些。只是好奇,还有什么不同吗 coffeescript在闭包顶部创建extends方法: __extends = function(chil

在JavaScript中,我必须使用

Backbone.Model.extend()
为我的模型创建一个“类”。但在咖啡脚本中,我可以使用

class X extends Backbone.Model
二者之间有什么区别。有什么理由让我用一个代替另一个吗

一个简单的测试,看看有什么区别


我相信它没有显示所有的代码。。。但是
extends()
似乎稍微简单一些。只是好奇,还有什么不同吗

coffeescript在闭包顶部创建extends方法:

__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
下划线将其定义为:

实现略有不同,但效果相同

如果您使用的是主干或更具体地说是下划线,那么您可以选择这两种方法中的任何一种,但是coffeescript中的
扩展
允许您扩展任何类,而不需要像下划线或主干这样的依赖项

使用主干时可以使用该方法执行的一个示例可能是重写构造函数以向主干在其options对象中不支持的类提供可选项

class MyView extends Backbone.View
  constructor: (foo, bar, options)->
    # locals foo and bar are now assigned
    @foo = foo
    @bar = bar
    super(options) # calls to Backbone.View with the normal options

myView = new MyView("foo","bar", {model: someModel, el: $('#someEl')})
myView.foo # "foo"
myView.model == someModel # true

只需将Model.extend()中的代码与CoffeeScript编译的代码进行比较……一种是主干网扩展主干网类的方式,另一种是CoffeeScript提供的扩展类的一般方式,其作用完全相同(正如它将调用
主干网.Model
的构造函数,这是您在第一个日志中看到的行)。但是,如果在使用主干扩展时碰巧重写构造函数,则它们可能会有所不同。
class MyView extends Backbone.View
  constructor: (foo, bar, options)->
    # locals foo and bar are now assigned
    @foo = foo
    @bar = bar
    super(options) # calls to Backbone.View with the normal options

myView = new MyView("foo","bar", {model: someModel, el: $('#someEl')})
myView.foo # "foo"
myView.model == someModel # true