我是 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" });
您创建了一个新对象,其结构(方法和变量)已在别处定义。对象可以被认为是一种语言的“所有非原生项”,其中“原生项”是指整数、字符等基本类型。
在大括号 {} 中,您传递某个变量或方法的值。正如 Tomasz Nurkiewicz 先前解释的那样,这被称为构造函数,因为它允许您“构造”一个新对象,其模型已在其他地方进行了描述。
举个大家熟知的例子:你写
var myArray = new 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');
}
});
一般情况
当“主干”(使用 backbone.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/