我是新来的JS和骨干新Backbone.Model()VS Backbone.Model.extend()
什么是这两者之间的区别?
TestModel = new Backbone.Model({ title: "test title" })
TestModel = Backbone.Model.extend({ title: "test title" })
我是新来的JS和骨干新Backbone.Model()VS Backbone.Model.extend()
什么是这两者之间的区别?
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" });
您创建一个新的对象,其结构(方法和变量)已被定义在别处。对象可以被视为一种语言的“所有非本地项目”,其中“本地项目”指的是整数,字符等基本类型。
在大括号{}中,您传递某个变量的值或方法。正如Tomasz Nurkiewicz先前解释的那样,这称为构造函数,因为它允许您“构建”一个新模型已在别处描述过的对象。
为了给你一个已知的例子:你写
var myArray = new Array();
这意味着,要创建一个新的Array,这是已被别处定义的非原生对象。你也可以这样写:
var myArray = new Array([1,2,3,4,5]);
然后它用给定的数字填充数组。
第二:修改现有对象的定义 (即,房子的项目)
与
var TestModel = Backbone.Model.extend({ title: "test title" })
你说你的虚拟机的东西很简单:“的对象你给我默认是非常好的,但我想实现更多的功能/性能” 。 因此,通过“扩展”子句,您可以修改对象的定义,添加或覆盖现有的方法/属性。
示例:backbone.js中的一个很好的示例由集合的比较器函数给出。当你扩展定义它的对象时,“它将被用来维护按照排序顺序的集合”。
例子:
myCollection = Backbone.Collection.extend({
comparator:function(){
return item.get('name');
}
});
通则
你需要“backboning”(使用Backbone.js的框架开发)是延长定对象(例如视图时做什么)有:
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!"});
....希望这有助于价值...
在第二种情况下TestModel
是一个构造器,您可以使用几次后创建模型的实例:
var model = new TestModel();
但是经过title
到extend
具有不同的含义。你或许应该使用:
或通过创建一个对象的时候,模型属性:
var model = new TestModel({ title: "test title" });
在另一方面TestModel
第一种情况已经是模型的实例(因此它应该被命名testModel
遵循的JavaScript命名约定):
var testModel = new Backbone.Model({ title: "test title" })
+1(房子VS房子本身的项目)的隐喻:) – 2013-07-23 14:08:51
能你说用“扩展”你创建一个原型,用“新”从原型创建一个对象?! – netfed 2014-10-20 01:58:39