任何人都可以解释如何在Backbone中创建模型吗?传入一个对象,但是你可以使用new作为一个函数对象。
这让我相信Backbone以某种方式将对象文字附加到函数对象,因为你无法做到new {key1:value1, key2,value2}
来自Backbone的示例
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();
答案 0 :(得分:3)
这与JavaScript中的对象系统如何工作以及对象和constructor
的new
keyword概念有关。
如果您定义具有某些属性的对象:
var myobj = {
foo: 'bar'
}
然后尝试执行new myobj
您将收到myobj
不是函数的错误。
但是,假设我们定义了一个函数,它将一些值传递给this
属性:
var myobj = function(foo){
this.foo = foo || "bar";
}
让我们尝试制作一个new
实例:
var m = new myobj()
m.foo
> bar
var m2 = new myobj('baz');
m2.foo
> baz
这是有效的,因为JavaScripts中的函数只是函数类型的对象:
typeof myobj
> "function"
typeof myobj.prototype
> "object"
现在,如果你看一下Backbone source(特别是第184行),你会看到:
var Model = Backbone.Model = function(attributes, options) {
该行表示模型实际上是一个可以接受两个参数attributes
和options
的函数。
这是允许您创建此new
副本的原因。