人々は多くの点でBackbone.View
を使用しています。私は混乱しています。私が見てきた:Backbone.Viewの理解
Backbone.View.extend({});
new Backbone.View.extend({});
new Backbone.View();
new Backbone.View;
は、最初の3つは異なるです。最後の2つは同じです。 (フィドルについては、hereを参照してください。)どの場合に起こっていますか?
人々は多くの点でBackbone.View
を使用しています。私は混乱しています。私が見てきた:Backbone.Viewの理解
Backbone.View.extend({});
new Backbone.View.extend({});
new Backbone.View();
new Backbone.View;
は、最初の3つは異なるです。最後の2つは同じです。 (フィドルについては、hereを参照してください。)どの場合に起こっていますか?
これはすべて同じことです。
Backbone.View.extend({})
を使用してクラスを強制終了すると、表示されているように、追加のプロパティまたはメソッドがクラスに追加されていません。空のハッシュ{}
を引数として渡しています。だから、Backbone.View
とBackbone.View.extend({})
はほとんど同じことです。
キーワードプレゼンスについては、以前は新しいクラスをインスタンス化しています。 new
キーワードを使用しないと、クラスについて話しているだけですが、new
キーワードでは、この非常に同じクラスのオブジェクトについて話しています。
育児は義務ではありません。これは、コンストラクタに引数を渡したい場合にのみ必要です。new Backbone.View()
とnew Backbone.View;
は、前に書いた理由でnew Backbone.View()
とnew Backbone.View.extend({})
のように同じです。このフィドル(http://jsfiddle.net/C2Z34/)について
myView1
ビューを拡張するクラスですmyView2
は(私のバイオリンのようにparentesisで)の対象でありますBackbone.Viewのクラス拡張。myView3
は、Backbone.Viewクラスのオブジェクトです。それは拡張されていません。myView4
拡張myView3
同じサブクラスを作成します。例では、カスタム・コードを追加しないため、ビュー・クラスは元のバックボーン・ビューとまったく同じように動作します。 newキーワードを使用すると、ビューのインスタンスを返すクラスのコンストラクタ関数を呼び出します。 例えば、カスタムコードをビューに表示したい場合は、レンダー機能でBBビューを拡張します。このビューを使用する場合は、拡張ビューの新しいインスタンスを作成します。
私は混乱しています。 'new Backbone.View.extend({});はインスタンスを返しません。関数を返します。 – Randomblue
これは、このステートメントがメソッド呼び出しの順序を混乱させる可能性があるためです。拡張クラスのインスタンスを1つしか作成できないため、この結合ステートメントはほとんど必要ありません。呼び出し:new(Backbone.View.extend({}))は期待どおりに動作するはずです。 – ProTom
メソッド呼び出しの前に新しい文が追加されました。例: "new hello();"関数呼び出しは実行されませんが、このメソッドはnewを介して作成された新しいオブジェクトのコンストラクタ関数として使用されます。したがって、あなたの拡張関数は完全に新しいオブジェクトのコンストラクタ関数として使用されます。 JS関数はオブジェクト(したがってクラス)であるため、newを呼び出すことでJSの新しいインスタンスが作成されるため、これはJSWTFではありません。 – ProTom
'Backbone.View'と' Backbone.View.extend() 'は* different *です。 [このフィドル](http://jsfiddle.net/C2Z34/1/)をご覧ください。 – Randomblue
(Fiddleのサンプルを実行できないため、Chromeコンソールを使用しました) @ gustavotkgはまだ正しいです。 コンソールは、最初の3つが異なることを伝えます。しかし、 'Backbone.View'と' Backbone.View.extend() 'は似ています。 'new backbone.View'と' new(Backbone.View.extend()) 'を使うと、' Backbone.View.extend() 'が返す関数を迂回しても、Viewコンストラクタを呼び出して同様のオブジェクトを返します。[継承、ライン1096]。 'new Backbone.View.extend()'は、括弧がないことに注意してください。多かれ少なかれJSWTFです。私は 'new(Backbone.View.extend()) 'を呼び出すと期待していますが、そうではありません。 – Wieczo
@wieczo:ありがとう。角括弧についてのあなたのコメントは非常に役に立ちます。私はそれについて混乱していた。 – Randomblue