Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 新主干.Model()与主干.Model.extend()的比较_Javascript_Backbone.js_Constructor_Instance - Fatal编程技术网

Javascript 新主干.Model()与主干.Model.extend()的比较

Javascript 新主干.Model()与主干.Model.extend()的比较,javascript,backbone.js,constructor,instance,Javascript,Backbone.js,Constructor,Instance,我不熟悉JS和主干 这两者有什么区别 TestModel = new Backbone.Model({ title: "test title" }) TestModel = Backbone.Model.extend({ title: "test title" }) 在第二种情况下,TestModel是一个构造函数,您可以在以后多次使用它来创建模型的实例: var model = new TestModel(); 但是,将title传递给extend具有不同的含义。您可能应该使用: var

我不熟悉JS和主干

这两者有什么区别

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

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

var model = new TestModel();
但是,将
title
传递给
extend
具有不同的含义。您可能应该使用:

var TestModel = Backbone.Model.extend({defaults: { title: "test title" }});
或在创建对象时传递模型属性:

var model = new TestModel({ title: "test title" });
另一方面,在第一种情况下,
TestModel
已经是model的一个实例(因此它应该命名为
TestModel
,以遵循JavaScript命名约定):


有一个基本的区别,简言之,可以描述为“房屋项目和房屋本身之间的区别”

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

首先:一个新对象 (即房屋)

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

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

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

var myArray = new Array();
这意味着您正在创建一个新数组,它是一个非本机对象,已在别处定义。你也可以写:

var myArray = new Array([1,2,3,4,5]);
它用给定的数字填充数组

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

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

示例:中的一个很好的示例是集合的comparator函数。扩展定义它的对象时,“它将用于按排序顺序维护集合”

例如:

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

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

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

[...]
var submitBtn = new ButtonView({btnText:"SubmitMe!"}),
var cancelBtn = new ButtonView({btnText:"Erase All!"});
…希望这有助于…

+1对于比喻(房子的项目与房子本身):)你能说用“扩展”创建原型,用“新建”从原型创建对象吗?!
var TestModel = Backbone.Model.extend({ title: "test title" })
myCollection = Backbone.Collection.extend({
    comparator:function(){
        return item.get('name');
    }
});
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!"});