0

バックボーンでモデルを作成する方法を説明できる人はいますか? オブジェクトを渡しますが、関数オブジェクトであるかのように 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();
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 の関数は function 型の単なるオブジェクトだからです。

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

ここで、バックボーン ソース(具体的には 184 行目) を見ると、次のように表示されます。

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

その行は、モデルが実際には2つの引数を受け入れることができる関数であると言っていattributesますoptions.

これによりnew、これのコピーを作成できます。

于 2012-09-29T15:55:58.317 に答える