新的Backbone.Model()与Backbone.Model.extend()

我是JS和Backbone的新手

这两者有什么区别?

TestModel = new Backbone.Model({ title: "test title" }) TestModel = Backbone.Model.extend({ title: "test title" }) 

有一个基本的差别,简而言之,可以说是“房子和房子本身的差别”。

对于专家程序员,我只想说“新的Backbone.Model”返回一个对象实例,但“Backbone.Model.extend”返回一个构造函数

第一:一个新的对象 (即房子)

 var TestModel = new Backbone.Model({ title: "test title" }); 

你创build一个新的对象,其结构(方法和variables)已被定义在别的地方。 对象可以被认为是一种语言的“所有非本地项目”,其中“本地项目”是指整数,字符等基本types。

在大括号{}中,您传递了一些variables或方法的值。 正如托马斯·努尔凯维奇(Tomasz Nurkiewicz)先前解释的那样,这被称为构造函数,因为它允许你“构造”一个​​新模型在别处被描述过的对象。

给你一个已知的例子:你写

 var myArray = new Array(); 

这意味着你正在创build一个新的数组,这是一个在其他地方定义的非本地对象。 你也可以写:

 var myArray = new Array([1,2,3,4,5]); 

它用给定的数字填充数组。

第二:修改现有对象的定义 (即房子的项目)

 var TestModel = Backbone.Model.extend({ title: "test title" }) 

你对虚拟机说一些非常简单的东西:“你给我默认的对象是非常好的,但是我想实现更多的function/属性”。 因此,使用“扩展”子句,您可以修改对象的定义,添加或覆盖现有的方法/属性。

例子: backbone.js中的一个很好的例子是集合的比较函数给出的。 当扩展定义它的对象时,“它将被用来维护按照sorting顺序的集合”。

例:

 myCollection = Backbone.Collection.extend({ comparator:function(){ return item.get('name'); } }); 

一般来说

当“骨干”(使用backbone.js框架进行开发)时,你需要做的是用给定的对象(例如一个视图)来扩展:

 window.ButtonView = Backbone.View.extend({ btnText:'nothingByDefault', myNewMethod:function(){ //do whatever you want, maybe do something triggered by an event, for instance } }); 

然后在代码的其他地方使用它,一次你想要处理的每个button,包括大括号中的所有值你想给对象

 [...] var submitBtn = new ButtonView({btnText:"SubmitMe!"}), var cancelBtn = new ButtonView({btnText:"Erase All!"}); 

….希望这可以帮助…

在第二种情况下, TestModel是一个构造函数,您可以稍后多次使用它来创build模型的实例:

 var model = new TestModel(); 

然而,通过title extend有不同的含义。 你应该可以使用:

 var TestModel = Backbone.Model.extend({defaults: { title: "test title" }}); 

或者在创build对象时传递模型属性:

 var model = new TestModel({ title: "test title" }); 

另一方面,在第一种情况下, TestModel已经是模型的一个实例(因此它应该命名为testModel以遵循JavaScript命名约定):

 var testModel = new Backbone.Model({ title: "test title" })