67

バックボーン モデルの初期化とコンストラクターの違いは何ですか。

バックボーン モデル (ParentModel) を拡張するときは、初期化メソッドを使用して既定のプロパティを設定します。しかし、ParentModel に基づいてモデルを作成するときはいつでも、コンストラクターを使用して初期機能を実行します。機能するのでこれを行いますが、職場の誰かから、初期化とコンストラクターの両方を使用する理由を尋ねられましたが、機能すること以外に良い答えがありませんでした。ソースコードを読んで理解するのに時間を費やすこともできましたが、ここで尋ねて正しい答えを得た方がはるかに簡単に思えました.

var ParentModel = Backbone.Model.extend({
  initialize : function() {
    // code here
  },
});


var Model = ParentModel.extend({
  constructor : function (options) {
    Backbone.Model.prototype.constructor.call(this, options);
    // code here
   },
4

2 に答える 2

90

constructorバックボーンが構造をセットアップする前に実行されます。initialize構造体のconstructor関数内で呼び出されます。したがって、基本的に、バックボーンが構造をセットアップする前に何かを拡張するconstructor必要がある場合は、バックボーンが構造をセットアップした後に何かを拡張する必要がある場合に使用しますinitialize

件名に関するGithubの議論から)

于 2012-04-12T07:32:15.457 に答える
32

constructorBackbone がそれ自体をセットアップするために使用する機能です。モデルの作成、イベントの設定、およびその他のあらゆる種類のセットアップを行います。メソッドをオーバーライドまたはシャドウイングしてバックボーン コードの実行を防止すると、デバッグが困難な奇妙なエラーが発生するため、これをオーバーライドする場合は十分に注意してください。

initialize一方は、バックボーンが内部の配管を終えた後にそのオブジェクトに対して呼び出す関数です。通常のバックボーン機能に干渉することを特に意図していない場合は、単に初期化を使用してください。

CoffeeScript を使用している場合は、より直感的に使用できる可能性がありますconstructor。(それは私のためです)。ただし、常に を呼び出すようにしてくださいsuper

于 2012-04-12T11:22:41.443 に答える