我是JS和Backbone的新手
两者有什么区别?
TestModel = new Backbone.Model({ title: "test title" })
TestModel = Backbone.Model.extend({ title: "test title" })
最佳答案
有一个基本的区别,简称为“房屋的设计与房屋本身之间的区别”。
对于专业程序员,我只想说“new Backbone.Model”返回一个对象实例,但是“Backbone.Model.extend”返回一个构造函数。
第一个:新对象
(即房子)
var TestModel = new Backbone.Model({ title: "test title" });
您将创建一个新的对象,该对象的结构(方法和变量)已在其他位置定义。对象可以被视为语言的“所有非 native 项目”,其中“ native 项目”是指基本类型,例如整数,字符等。
在大括号{}中,您传递了一些变量或方法的值。正如Tomasz Nurkiewicz先前解释的那样,它称为构造函数,因为它使您可以“构造”模型在其他地方已描述过的新对象。
给你一个已知的例子:你写
var myArray = new Array();
这意味着您正在创建一个新的数组,这是一个在其他地方定义的非本地对象。您还可以编写:
var myArray = new Array([1,2,3,4,5]);
然后用给定的数字填充数组。
SECOND:修改现有对象的定义
(即房屋的项目)
和
var TestModel = Backbone.Model.extend({ title: "test title" })
您对您的VM说了很简单的话:“默认情况下给我的对象非常好,但是我想实现更多的功能/属性”。
因此,使用“extend”子句可以修改对象的定义,以添加或覆盖现有的方法/属性。
示例:backbone.js中的一个很好的示例由集合的比较器函数给出。扩展定义它的对象时,“它将用于按排序顺序维护集合”。
例子:
myCollection = Backbone.Collection.extend({
comparator:function(){
return item.get('name');
}
});
一般
当进行“ Backbone ”(使用lobb.js框架进行开发)时,您期望做的是使用以下方法扩展给定的对象(例如View):
window.ButtonView = Backbone.View.extend({
btnText:'nothingByDefault',
myNewMethod:function(){
//do whatever you want, maybe do something triggered by an event, for instance
}
});
然后在代码中的其他位置使用它,对每个您要处理的按钮都使用一次,在花括号中包括要提供给对象的所有值
[...]
var submitBtn = new ButtonView({btnText:"SubmitMe!"}),
var cancelBtn = new ButtonView({btnText:"Erase All!"});
....希望这可以帮助...
关于javascript - 新的Backbone.Model()与Backbone.Model.extend(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9093209/