1

私はベースビューを持っていますV:

V = Backbone.View.extend({   
  initialize: function() {
    console.log(this.options.z);
    console.log(this.options.q);   
  }
});

によって拡張され、プロパティ ( )VVの値を設定します。q: 234

VV = V.extend({q:234});

Vはさらに次のように特化されていVVます:

new VV({z: 123})

問題は、基本型が にアクセスqできないことです。どうすればこれを行うことができますか? qこの例では、この継承システムを理解しようとして zいますが、サブクラスで定義される仮想/抽象値のようなものです。

http://jsfiddle.net/maxl/G8cab/

4

1 に答える 1

0

あなたがこれを言うとき:

VV = V.extend({q: 234});

VVその「サブクラス」として作成してVいる場合は、追加のqプロパティがあります。「クラス」によって定義されたプロパティは、からの自動オプション処理とは何の関係もありませんView#initialize

「ビューの新しいインスタンスを作成する」と記載されている場合は、ドキュメントの方が優れている可能性があります。

次に、new VV({z: 123})それが単一のパラメーターで{z: 123}ビューのメソッドに渡されると(1.1.0より前のバックボーンはコンストラクターのオプションに自動的に設定されます)、が含まれるため、次のようになります。initializeoptionsthis.optionsqthis.qinitialize

initialize: function(options) {
  console.log(options.z);
  console.log(this.q);
}

また、これを行った場合:

var VVV = VV.extend({q: 'pancakes'});

getqのインスタンスが内部にあるデフォルトを置き換えます。VVthis.q'pancakes'initialize

デモ: http: //jsfiddle.net/ambiguous/eqBV2/

使用View#extendはサブクラス化のようなものです(より正確には、新しいプロトタイプインスタンスを作成します)が、new新しいオブジェクト(またはプロトタイプインスタンスのコピー)を作成します。もちろん、クラス/インスタンス言語はJavaScriptの現実に適合しないため、用語をあまり真剣に受け止めないように注意する必要があります。

于 2012-05-09T23:36:35.357 に答える