0

谁能解释一下如何在 Backbone 中创建模型?您传入一个对象,但您可以像使用函数对象一样使用 new。

这使我相信 Backbone 以某种方式将对象文字附加到函数对象,而这是您无法做到的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();
4

1 回答 1

3

这与 JavaScript 中对象系统的工作方式以及constructor对象的 a 和new关键字的概念有关。

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

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

这是因为 JavaScript 中的函数只是函数类型的对象:

typeof myobj
> "function"
typeof myobj.prototype
> "object"

现在,如果您查看Backbone 源代码(特别是第 184 行),您将看到:

 var Model = Backbone.Model = function(attributes, options) {

那行是说模型实际上是一个可以接受两个参数的函数,attributes并且options.

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

于 2012-09-29T15:55:58.317 回答