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
Javascript 主干模型创建|概念理解_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干模型创建|概念理解

Javascript 主干模型创建|概念理解,javascript,backbone.js,Javascript,Backbone.js,有人能解释一下如何在主干网中创建模型吗?您传入了一个对象,但可以像使用函数对象一样使用new 这让我相信主干网是在某种程度上将对象文字附加到函数对象,因为您不能new{key1:value1,key2,value2} 主干网示例 var Sidebar = Backbone.Model.extend({ promptColor: function() { var cssColor = prompt("Please enter a CSS color:"); this.set(

有人能解释一下如何在主干网中创建模型吗?您传入了一个对象,但可以像使用函数对象一样使用new

这让我相信主干网是在某种程度上将对象文字附加到函数对象,因为您不能
new{key1:value1,key2,value2}

主干网示例

var Sidebar = Backbone.Model.extend({
  promptColor: function() {
    var cssColor = prompt("Please enter a CSS color:");
    this.set({color: cssColor});
  }
});

window.sidebar = new Sidebar;

sidebar.on('change:color', function(model, color) {
  $('#sidebar').css({background: color});
});

sidebar.set({color: 'white'});

sidebar.promptColor();

这与JavaScript中的对象系统如何工作以及对象和对象的概念有关

如果定义具有某些特性的对象:

var myobj = {
    foo: 'bar'
}
然后尝试执行
newmyobj
您将得到一个错误,即
myobj
不是一个函数

但是,假设我们定义了一个函数,该函数将一些传入值设置为
this
属性:

var myobj = function(foo){
    this.foo = foo || "bar";
}
让我们尝试创建一个新的实例:

var m = new myobj()
m.foo
> bar
var m2 = new myobj('baz');
m2.foo
> baz
这是因为Java脚本中的函数只是function类型的对象:

typeof myobj
> "function"
typeof myobj.prototype
> "object"
现在,如果您查看(特别是第184行),您将看到:

 var Model = Backbone.Model = function(attributes, options) {
这句话的意思是,模型实际上是一个可以接受两个参数的函数,
attributes
options


这就是允许您创建新副本的原因。

这与JavaScript中的对象系统的工作方式以及对象和对象的概念有关

如果定义具有某些特性的对象:

var myobj = {
    foo: 'bar'
}
然后尝试执行
newmyobj
您将得到一个错误,即
myobj
不是一个函数

但是,假设我们定义了一个函数,该函数将一些传入值设置为
this
属性:

var myobj = function(foo){
    this.foo = foo || "bar";
}
让我们尝试创建一个新的实例:

var m = new myobj()
m.foo
> bar
var m2 = new myobj('baz');
m2.foo
> baz
这是因为Java脚本中的函数只是function类型的对象:

typeof myobj
> "function"
typeof myobj.prototype
> "object"
现在,如果您查看(特别是第184行),您将看到:

 var Model = Backbone.Model = function(attributes, options) {
这句话的意思是,模型实际上是一个可以接受两个参数的函数,
attributes
options


这就是允许您创建新的副本的原因。

在backbonejs网站上,您可以找到带注释的主干源代码。很有启发性,很容易理解,应该能回答你的问题!好吧,我已经解剖了主干的前50行左右(没有评论)…没有走那么远…加上在具体理解之前的概念理解是更好的学习方式…问题更新。如果我能读到所有500行左右的文字,并完全理解它,我会成为某种JS上帝…从那里开始,然后从那里开始。当前发布的版本与github版本稍有不同,但影响不大。@mu…该链接很酷…如何为jQuery获得类似的链接?我在github上搜索了它并创建了jQuery…但我在进入github后找不到类似的jQuery代码列表。jQuery是由片段构建的,因此github中没有单一的文件版本。在backbonejs网站上,您可以找到带注释的主干源代码。很有启发性,很容易理解,应该能回答你的问题!好吧,我已经解剖了主干的前50行左右(没有评论)…没有走那么远…加上在具体理解之前的概念理解是更好的学习方式…问题更新。如果我能读到所有500行左右的文字,并完全理解它,我会成为某种JS上帝…从那里开始,然后从那里开始。当前发布的版本与github版本稍有不同,但影响不大。@mu…该链接很酷…如何为jQuery获得类似的链接?我在谷歌上搜索了它,并在github上创建了jQuery……但我在进入github后,找不到类似的jQuery代码列表。jQuery是由片段构建的,因此github中没有单一的文件版本。