使用underscore和backbone的extend()方法有何不同?

19

我知道backbone在某种程度上依赖于underscore和jquery。下面这两行代码有什么区别吗?

app.notifications = _.extend({}, Backbone.Events);

并且

app.notifications  = Backbone.Events.extend({});

如果它们相同,那么它们有多不同?


1
很确定 Backbone.Events.extend 不存在。 - jermel
0.9.9现在允许您扩展事件http://backbonejs.org/?0-9-9#changelog - HP.
1个回答

34

Backbone.Events.extend不存在,因此我将使用Backbone.Model代替。

_.extend(target, mixin1, mixin2)会将属性复制到目标对象中。

Backbone.Model.extend将基本上创建一个构造函数(函数),其原型具有您提供的属性,以实现对Backbone.Model进行子类化。这将使您能够创建新类的实例。

var Person = Backbone.Model.extend({name: 'yourName'});
var me = new Person();
alert(me.name);

尽管_.extend会失败,

var Person = _.extend({name: 'yourName'}, Backbone.Model);
var me = new Person();  //error b/c Person is a regular object
alert(me.name);

简而言之,Backbone.Model.extend创建一个新的构造函数(function),而_.extend修改现有对象。

var modified = {};
alert(modified === _.extend(modified, Backbone.Model)); //true
alert(modified === Backbone.Model.extend(modified)); //false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接