首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >new Backbone.Model() vs Backbone.Model.extend()

new Backbone.Model() vs Backbone.Model.extend()
EN

Stack Overflow用户
提问于 2012-02-01 17:07:02
回答 2查看 32.5K关注 0票数 61

我是JS和Backbone的新手

这两个有什么不同?

代码语言:javascript
复制
TestModel = new Backbone.Model({ title: "test title" })
TestModel = Backbone.Model.extend({ title: "test title" })
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-01 21:50:55

有一个根本的区别,简而言之,就是“房子的项目和房子本身的区别”。

对于专业程序员,我只能说"new Backbone.Model“返回一个对象实例,而"Backbone.Model.extend”返回一个构造函数

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

代码语言:javascript
复制
var TestModel = new Backbone.Model({ title: "test title" });

您创建了一个新对象,其结构(方法和变量)已在其他地方定义。对象可以被认为是一种语言的“所有非本机项”,而对于“本机项”,我指的是基本类型,如整数、字符等。

在大括号{}中,您可以传递某个变量或方法的值。正如Tomasz Nurkiewicz之前解释的那样,这被称为构造函数,因为它允许您“构造”一个新对象,该对象的模型已在其他地方描述过。

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

代码语言:javascript
复制
var myArray = new Array();

这意味着您正在创建一个新的Array,它是在其他地方定义的非本机对象。你也可以这样写:

代码语言:javascript
复制
var myArray = new Array([1,2,3,4,5]);

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

SECOND:修改已有object的定义(即房屋的项目)

使用

代码语言:javascript
复制
var TestModel = Backbone.Model.extend({ title: "test title" })

你对你的VM说了一句非常简单的话:“你给我的默认对象非常好,但我想实现更多的函数/属性”。因此,使用"extend“子句可以修改对象的定义,添加或覆盖现有的方法/属性。

示例:集合的比较器函数给出了一个很好的backbone.js示例。当您扩展定义它的对象时,“它将用于按排序的顺序维护集合”。

示例:

代码语言:javascript
复制
myCollection = Backbone.Collection.extend({
    comparator:function(){
        return item.get('name');
    }
});

通用中的

当“backboning”(使用backbone.js框架进行开发)时,您需要做的是使用以下内容扩展给定的对象(例如,视图):

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

然后在代码中的其他地方使用它,对要处理的每个按钮使用一次,包括在大括号中要赋予对象的所有值

代码语言:javascript
复制
[...]
var submitBtn = new ButtonView({btnText:"SubmitMe!"}),
var cancelBtn = new ButtonView({btnText:"Erase All!"});

....Hope这是有帮助的...

票数 79
EN

Stack Overflow用户

发布于 2012-02-01 17:14:37

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

代码语言:javascript
复制
var model = new TestModel();

但是,将title传递给extend有不同的含义。您可能应该使用:

代码语言:javascript
复制
var TestModel = Backbone.Model.extend({defaults: { title: "test title" }});

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

代码语言:javascript
复制
var model = new TestModel({ title: "test title" });

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

代码语言:javascript
复制
var testModel = new Backbone.Model({ title: "test title" })
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9093209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档