首页 > web前端 > js教程 > 正文

JavaScript 对象成员的原型是共享数组还是私有数组?

Linda Hamilton
发布: 2024-11-14 18:43:02
原创
949 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板