2

バックボーンソースを見ると、クラスが次のように定義されていることがわかりました。

var Model = Backbone.Model = function(...

Modelが2回定義されているのはなぜですか。Modelを検索すると、Modelのプロトタイプが次のように拡張されていることがわかりました。

_.extend(Model.prototype, Events, {

少しテストを行ったところ、「Model.prototype」が拡張されている場合、変更は自動的にBackbone.Modelに影響するようです。この背後にある理由と、代わりに次のように記述されていない理由は何ですか。

Backbone.Model = function(...
Backbone.Model.prototype.extend(...

うまくいけば、これはプロトタイプの継承についての私の理解を一段と高めるでしょう

4

3 に答える 3

4

Modelこれは、入力するのが。より短いという名前のローカル変数を持つための単なるショートカットですBackbone.Model。Javascriptには参照の概念がないため、ModelBackbone.Modelはまったく同じオブジェクトを指します。

于 2012-10-23T22:24:03.773 に答える
1

オブジェクトはJavaScriptで参照によって渡されます。オブジェクトを複数の変数に割り当てる場合、オブジェクトのコピーを作成することはありません。

var a = {};

var b = a;
a === b // both variables point to (reference) the same object

b.x = 5;
a.x === 5
// updates through one of the variables are thus automatically
// propagated to the other variables that reference the same object.
于 2012-10-23T22:24:00.623 に答える
0

Backboneのextendメソッドは、関数プロトタイプを拡張することによって実行することを正確に実行するためです。

于 2012-10-23T22:25:53.550 に答える