ホームページ > ウェブフロントエンド > jsチュートリアル > ## ノックアウト ビュー モデル: オブジェクト リテラルと関数 - どちらが優れていますか?

## ノックアウト ビュー モデル: オブジェクト リテラルと関数 - どちらが優れていますか?

Barbara Streisand
リリース: 2024-10-26 10:04:02
オリジナル
338 人が閲覧しました

## Knockout View Models: Object Literals vs. Functions - Which is Better?

ノックアウト ビュー モデルを宣言するためのオブジェクトと関数

Knockout JS では、ビュー モデルはオブジェクト リテラルまたは関数として宣言できます。次の例を考えてみましょう。

// Object literal
var viewModel = {
    firstname: ko.observable("Bob")
};

ko.applyBindings(viewModel );
ログイン後にコピー
// Function
var viewModel = function() {
    this.firstname= ko.observable("Bob");
};

ko.applyBindings(new viewModel ());
ログイン後にコピー

どちらのアプローチでも同じ目的を達成できますが、ビュー モデルを関数として定義すると、いくつかの利点があります。

「this」への直接アクセス

関数内で、「this」は作成されるインスタンスを指します。これにより、View Model のオブザーバブルと計算されたプロパティに簡単にアクセスできるようになります:

var ViewModel = function(first, last) {
  this.first = ko.observable(first);
  this.last = ko.observable(last);
  this.full = ko.computed(function() {
     return this.first() + " " + this.last();
  }, this);
};
ログイン後にコピー

対照的に、オブジェクト リテラルを使用する場合、計算されたオブザーバブル内で明示的なコンテキスト バインディングが必要です:

var viewModel = {
   first: ko.observable("Bob"),
   last: ko.observable("Smith"),
};

viewModel.full = ko.computed(function() {
   return this.first() + " " + this.last();
}, viewModel);
ログイン後にコピー

カプセル化と変数プライバシー

関数は、グローバル スコープに公開されないプライベート変数を定義できるため、ビュー モデルに対してより自然なカプセル化を提供します。これにより、偶発的な上書きや競合を防ぐことができます。

var ViewModel = function() {
    var self = this;
    this.items = ko.observableArray();
    this.removeItem = function(item) {
         self.items.remove(item);
    }
};
ログイン後にコピー

最後に、関数は「bind」メソッドを使用して簡単にバインドできるようになり、コールバック関数の正しいコンテキストが保証されます。

var ViewModel = function() {
    this.items = ko.observableArray();
    this.removeItem = function(item) {
         this.items.remove(item);
    }.bind(this);
};
ログイン後にコピー

要約、ノックアウト ビュー モデルを定義する方法は両方とも有効ですが、関数を使用すると、柔軟性、制御、カプセル化の利点が高まります。これらの利点により、関数はより複雑で保守しやすいビュー モデルにとって好ましい選択肢となります。

以上が## ノックアウト ビュー モデル: オブジェクト リテラルと関数 - どちらが優れていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート