更改 JavaScript 对象内的对象属性值会影响其他对象

2023-12-09

我想更改对象内部对象的属性。但是,当我这样做时,使用相同原型创建的其他对象属性也发生了变化。

代码如下:

var a = {
  x: { y: 'foo' }
}

var b = Object.create(a)
var c = Object.create(a)

console.log(a.x.y) // 'foo'
console.log(b.x.y) // 'foo'
console.log(c.x.y) // 'foo'

b.x.y = 'bar'

var d = Object.create(a)

console.log(a.x.y) // 'bar'
console.log(b.x.y) // 'bar'
console.log(c.x.y) // 'bar'
console.log(d.x.y) // 'bar'

我认为问题是因为所有对象都引用相同的x,因此改变y来自任何物体反映在所有物体中。谁能解释一下这里到底发生了什么,也许可以提供解决方法的参考和建议?


x是一个对象,这就是为什么它由指针引用,而不是像字符串那样由值引用。

请尝试以下解决方法:

b.x = { y: 'bar' } // instead of b.x.y = 'bar'

这会创建一个新对象x这将与其他人不同

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 JavaScript 对象内的对象属性值会影响其他对象 的相关文章

随机推荐

  • 动态创建类方法

    我正在编写一个类方法来创建另一个类方法 似乎有一些奇怪的地方class eval and instance eval在类方法的上下文中进行操作 为了显示 class Test1 def self add foo self class eva
  • 为什么是!!更适合检查对象是否真实? [复制]

    这个问题在这里已经有答案了 一些 JavaScript 示例使用 检查对象是否可用 Check to see if Web Workers are supported if window Worker Yes I can delegate
  • 带有尺寸参数的不成比例气泡图

    我创建了一个气泡图 并输入了一些测试值 如下所示 this chart1 Series blueBubble Points AddXY 2 3 6 this chart1 Series redBubble Points AddXY 1 0
  • GitHub.com 的存储库大小限制

    最近我一直在使用 GitHub 我想知道 github com 上托管的文件的存储库大小限制是多少 已知限制 有多个适用的回购协议大小限制 软限位 截至 2023 年 根据docs 这是 5 GB 如果超出此限制 您可能会收到来自 GitH
  • PHP 5.3 方法重载(就像 Java 中一样)

    在 Java 中 我们有一个方法重载功能 这对于单例非常有用 例如 我有两个不同的 getInstance 方法 公共静态 它们的行为根据收到的参数而有所不同 public static Currency getInstance Strin
  • 将字符串转换为哈希中的符号的最佳方法

    将散列中的所有键从字符串转换为 Ruby 中的符号的 最快 最干净 直接 方法是什么 这在解析 YAML 时会很方便 my hash YAML load file yml 我希望能够使用 my hash key 而不是 my hash ke
  • 如何将 pandas 数据帧转换为 NumPy 数组?

    按照我之前得到的建议在这里提问我正在将 Pandas 数据框转换为数字 NumPy 数组 为此 我使用了numpy asarray 我的数据框 DataFrame label vector 0 0 1 0 0033524514 2 0 02
  • 为什么Visual C++中栈地址低于堆地址?

    众所周知 栈地址高于堆地址进程地址空间 但是当我在VS2010中编写程序验证时 遇到了一些麻烦 栈的地址低于堆 甚至低于Data Segment 程序如下 include stdafx h include malloc h static i
  • scipy.minimize——获取成本函数与迭代?

    有没有办法使用 scipy minimize 在每次迭代的基础上访问成本函数 而不使用回调并重新执行成本函数 options disp似乎打算这样做 但只会导致优化器打印终止消息 将其打印到标准输出并使用就可以了contextlib red
  • R phylo对象:如何连接节点标签和节点编号

    R 中的 phylo 对象可以具有内部节点标签 phylo obj node label 但许多 R 函数使用节点编号而不是节点标签 甚至 phylo 对象本身也使用节点号来描述边 phylo obj edge 并且似乎没有内部节点标签到这
  • 使用 terminfo 仅重置前景色

    通过使用 ANSI 序列Esc 39m在终端中 可以清除前景色而不改变其他属性 如粗体 下划线或背景颜色 例如 echo e e 31 1mRed and bold e 39m Bold only 我想从 terminfo 功能中检索此序列
  • 将 JSON 转换为 Parquet

    我有一些 JSON 格式的 TB 日志数据 我想将它们转换为 Parquet 格式 以便在分析阶段获得更好的性能 我已经成功地通过编写一个mapreduce java作业来做到这一点 该作业使用镶木地板先生 and 镶木地板阿夫罗 我唯一不
  • 在圆形路径上制作圆圈动画

    我在屏幕中央有一个物体 图像 现在我想为这个对象周围的一些圆圈设置动画 实现该任务的最佳想法是什么 我应该使用任何专用的JS动画库 您可以使用一些简单的三角函数 如下所示 在线演示在这里 function loop calc x and y
  • 如何用C++从pgm文件中读取数据

    到目前为止 我可以读取每一行并将其打印到控制台 void readFile string line ifstream myfile example1 pgm if myfile is open while myfile good getli
  • 根据子节点值对父节点 XML 进行排序

    我有以下 XML
  • VB.NET 过滤 ListItems 问题

    我正在尝试根据字符串的存在来过滤列表框 基本上 如果有一个 ListItem 不包含该字符串 那么我想删除所有包含该字符串的 ListItem 这是我尝试过的 Dim Item As ListItem For Each Item In Ct
  • 删除与小于指定大小的组对应的行

    我有一个DataFrame共 100 个答案questions id and 50 user id的 每行代表特定用户的一个问题 桌子看起来像这样 user id question id timetaken answer 1 answer
  • VB Gridview 选择错误的行进行编辑

    您好 我有一个搜索框 当我搜索记录时 记录会显示出来 但是一旦我单击网格视图上的编辑 页面就会进行回发 并且所有记录都会显示备份 并选择第一条记录进行编辑 如何禁用此回发或使其在单击 编辑所有记录 时不再显示 VB CodeBehind P
  • 如果属性数量大于n,则返回Neo4j中的路径

    所以我有一个如下所示的图形数据库 唯一真正有趣的是SomeProperty可以是 是 或 否 在顶行中 3 个节点中有 1 个此属性为 是 在底行 所有 3 个节点的该属性均为 是 如何通过提出以下问题来编写仅返回底行的 Cypher 查询
  • 更改 JavaScript 对象内的对象属性值会影响其他对象

    我想更改对象内部对象的属性 但是 当我这样做时 使用相同原型创建的其他对象属性也发生了变化 代码如下 var a x y foo var b Object create a var c Object create a console log