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

标签 javascript backbone.js constructor instance

我是 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/

相关文章:

javascript - 每次按下按钮时清除 View 并重新开始 - backbone.js

javascript - 在 Backbone View 中填充选择列表数据的常见模式?

asp.net - Backbone.js、ASP.NET、WCF 服务、JSON

c++ - 来自不同类型的模板类复制构造函数 : should it follow the Rule of Five?

javascript - 向服务器报告页面花费的时间

c# - 在 asp.net mvc (razor) 中重用组件作为自定义文本字段、跨度等

javascript - 在没有 X 的情况下用 Python 执行 JavaScript

javascript - {尚无答案}从YouTube JSON Api获取评论分数

java - Java中重载构造函数时

c++ - 稍后在 C++ 中调用基类构造函数(不在初始化列表中)