首頁 >web前端 >js教程 >## 淘汰視圖模型:物件文字與函數 - 哪個更好?

## 淘汰視圖模型:物件文字與函數 - 哪個更好?

Barbara Streisand
Barbara Streisand原創
2024-10-26 10:04:02347瀏覽

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

宣告 Knockout 視圖模型的物件與函數

在 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」指的是正在建立的實例。這允許輕鬆存取視圖模型的可觀察量和計算屬性:

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);
};

總結,雖然兩種定義Knockout 視圖模型的方法都是有效的,但使用函數提供了更大的靈活性、控制和封裝優勢。這些好處使函數成為更複雜和可維護的視圖模型的首選。

以上是## 淘汰視圖模型:物件文字與函數 - 哪個更好?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn