首页 > web前端 > js教程 > 为什么原型化为数组的 JavaScript 对象成员在类实例之间共享?

为什么原型化为数组的 JavaScript 对象成员在类实例之间共享?

Patricia Arquette
发布: 2024-11-13 07:26:02
原创
709 人浏览过

Why do JavaScript Object Members Prototyped as Arrays Become Shared Across Class Instances?

原型化为数组的 JavaScript 对象成员:在类实例之间共享

在 JavaScript 中对数组进行原型设计时,了解这些成员是共享的至关重要在所有类实例中。如果您习惯了私有对象成员,这种行为可能看起来违反直觉。

行为解释

JavaScript 的原型机制允许对象从父对象继承属性和方法,称为原型。当您将数组定义为原型中的属性时,从该原型继承的所有对象都可以访问它。

示例脚本演示了此行为:

function Sandwich() {
    // Uncomment this to fix the problem
    //this.ingredients = [];
}
登录后复制

使用注释行如果不加注释,每个 Sandwich 实例都有自己的私有成分数组。然而,当该行被注释掉时,所有实例共享相同的原型数组。

这意味着向芝士汉堡添加成分也会更新 blt 和Spicy_chicken_sandwich 的成分。为了防止这种情况,您必须在构造函数中定义成分数组,如下面更新的示例所示:

function Sandwich() {
    this.ingredients = [];
}
登录后复制

原型与实例

至关重要区分原型属性和实例属性。原型属性由从该原型继承的所有对象共享,而实例属性对于每个对象都是唯一的。

  • 将属性分配给原型以定义共享数据或方法。
  • 分配构造函数内实例的属性,以定义特定于实例的数据。

修复行为的代码修改

在示例脚本中,取消注释该行.成分=[]; Sandwich 构造函数中确保每个实例都按预期拥有自己的成分数组。

结论

了解 JavaScript 中原型数组的行为对于避免意外共享至关重要类实例之间。永远记住,应该是特定于实例的数据应该在构造函数中定义,而共享数据可以通过继承分配给原型。

以上是为什么原型化为数组的 JavaScript 对象成员在类实例之间共享?的详细内容。更多信息请关注PHP中文网其他相关文章!

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