Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance 使用CoffeeScript`extend`与主干.js`extend的根本区别`_Inheritance_Backbone.js_Coffeescript - Fatal编程技术网

Inheritance 使用CoffeeScript`extend`与主干.js`extend的根本区别`

Inheritance 使用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

使用CoffeeScript
extends
与使用Backbone.js
extend
之间的根本区别是什么

例如,它是如何工作的

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在编译代码时会优化代码,尽管生成的文件可能会稍微多一些字符,但使用CoffeeScript
    class
    通常不会执行得更有效吗?
    Model = Bakbone.Model.extend()
    Model::set = ->
      super
    
    var Model;
    Model = Backbone.Model.extend();
    
    Model.prototype.set = function() {
      return Model.__super__.set.apply(this, arguments);
    };