5

リッチ クライアント アプリケーションに Knockout.js を使用していますが、多数の knockout.js ViewModel で構成されます。開発中に、knockout.js の ViewModel を作成する 2 つの方法に気付きました。最初の方法。

function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");}

第二の方法。

var appViewModel = {
this.firstName = ko.observable("Bert"),
this.lastName = ko.observable("Bertington")};

ViewModel を宣言するこれら 2 つの方法に特定の違いはありますか? knockout.js の公式ページの例では、最初の方法を使用しています。しかし、Knockout-validations.js のようなサード パーティのフレームワークでは、 2 番目の方法が使用されています。どの方法を使用すればよいですか? それを使用することの特定の利点はありますか?

最初の方法を使用する場合、Knockout-validations.js フレームワークを使用できないことがわかりました。私はこの問題について本当に混乱しています。どんなコメントでも大歓迎です。

ありがとうございました。

4

2 に答える 2

3

最初の方法では、オブジェクト コンストラクターを定義しますが、新しいオブジェクトをインスタンス化しません。この方法で引数を渡すことができます。複数のオブジェクト/モデルを作成している場合、これは間違いなく 2 番目の方法よりも扱いにくくなります。

2 番目の方法は、オブジェクト初期化構文を使用することです。これは、設定したフィールドを使用してメモリ内で新しいオブジェクトをインスタンス化します。一般に、これによりコードサイズが小さくなります。同じまたは類似の構造を持つ 2 つのオブジェクトを作成する場合は、最初の方法を使用します。

2 番目の代わりに 1 番目を使用できない理由はありません。新しいオブジェクトを作成し、必要な場所に渡すだけです。

これ:

function AppViewModel(fName, lName) {
    var self = this;
    self.firstName = ko.observable(fName);
    self.lastName = ko.observable(lName);
}
...
var appViewModel = new AppViewModel("Bert", "Bertington");

これと同じオブジェクトを作成します。

var appViewModel = {
    this.firstName = ko.observable("Bert"),
    this.lastName = ko.observable("Bertington")
};

最初のものは、より多くAppViewModelの s を作成できるようにするだけです。new AppViewModel("Joe", "Shmoe")

于 2012-09-28T06:07:54.887 に答える
2

あなたが説明する違いは、ノックアウトまたはノックアウトのライブラリに固有のものではなく、JavaScript コミュニティの間で広く議論されている言語レベルの問題です。JavaScript の第一人者である Douglas Crockford は、この問題の両面について 2 つの記事を書いています。

散在するフォーラム投稿、ブログ記事、および JavaScript プログラマーとの会話から、コミュニティはプロトタイプ スタイルを採用する傾向にあるようです。好みのスタイルを使用する必要があります。ドキュメントに基づくと、Knockout-Validation ライブラリはクラシック スタイルを念頭に置いて設計されているようです。この場合の従来のスタイルの利点は、Knockout-Validation ライブラリを使用する方が簡単であることです。プロトタイプの方法の欠点は、このライブラリを使用するのが難しいことです。

于 2012-11-13T03:29:03.480 に答える