首頁 >web前端 >js教程 >JavaScript 物件成員的原型是共享陣列還是私有陣列?

JavaScript 物件成員的原型是共享陣列還是私有陣列?

Linda Hamilton
Linda Hamilton原創
2024-11-14 18:43:021039瀏覽

Are JavaScript Object Members Prototyped as Arrays Shared or Private?

JavaScript 物件成員原型為陣列:共享還是私有?

在 JavaScript 中,物件屬性可以透過兩種方式定義:直接在物件上定義或作為物件的屬性物件的原型。在處理數組時,此行為具有重大影響。

預設情況下,原型數組在類別的所有實例之間共享,從而導致意外行為。例如,如果一個類別的原型包含一個空數組,則所有實例都將引用同一個數組。這可以在以下範例中觀察到:

function Sandwich() {
  // Uncomment to fix the problem
  //this.ingredients = [];
}

Sandwich.prototype = {
  "ingredients": [],
  "addIngredients": function(ingArray) {
    for(var key in ingArray) {
      this.addIngredient(ingArray[key]);
    }
  },
  "addIngredient": function(thing) {
    this.ingredients.push(thing);
  }
};

var cheeseburger = new Sandwich();
cheeseburger.addIngredients(["burger", "cheese"]);

var blt = new Sandwich();
blt.addIngredients(["bacon", "lettuce", "tomato"]);

print_r("Cheeseburger contains:", cheeseburger.ingredients);

在此範例中,cheeseburger 和 blt 共用相同的成分數組,即使它們是不同的實例。在起司漢堡中添加成分也會影響 blt,突顯陣列的共享性質。

要修正此行為,建議直接在物件本身上定義數組,而不是作為原型屬性。這確保每個實例都有自己的私有數組。對程式碼進行以下修改可以解決問題:

function Sandwich() {
  this.ingredients = [];
}

透過在建構函式中定義數組,Sandwich 的每個實例都將擁有自己的數組私有副本,從而消除共享行為。

總之,原型陣列在 JavaScript 中類別的所有實例之間共用。要為每個實例建立私有數組,需要在建構函數中直接在物件本身上定義數組。這種區別對於理解和管理 JavaScript 中的物件行為至關重要。

以上是JavaScript 物件成員的原型是共享陣列還是私有陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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