这两种继承方式在JavaScript中有什么区别

时间:2013-09-05 21:49:17

标签: javascript backbone.js ember.js coffeescript

今天我在开发余烬时浪费了几个小时的奇怪错误

我自信地忽略了Ember延伸方式

App.SomeModel = DS.Model.extend()

并以某种方式变成了我喜欢的方式

class App.SomeModel extends DS.Model()

我的第二种方式不起作用。所以我想知道这两者之间有什么区别以及为什么第二种方式在Ember中不起作用(Cuz'两种方式都在Backbone中工作)

2 个答案:

答案 0 :(得分:0)

看看EmberScript

http://emberscript.com/

关键区别在于Classextends直接编译为Ember等价物,而不是试图使Coffeescript的想法与Ember相符。

class SomeModel extends Ember.Object

变为

var SomeModel;
var get$ = Ember.get;
var set$ = Ember.set;
SomeModel = Ember.Object.extend();

答案 1 :(得分:0)

App.SomeModel = DS.Model.extend()

这会调用Ember.js自己的Object扩展方法,它会添加观察者,重新打开一个类等等。

class App.SomeModel extends DS.Model()

不依赖于框架,在普通的javascript中,它将“Somemodel”分配给“DS.Model()”对象的属性。它不会在扩展Ember.Object的

框架内工作