You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改对象的原生属性值?调用静态修改函数后对象属性修改未持久化的问题求助

Why aren't my object property changes persisting between function calls?

看起来你遇到的问题主要有两个小细节需要调整,另外可能是测试方式导致了修改不保留的错觉,咱们一步步来解决:

1. 静态函数里的硬编码全局变量问题

先看你的changeValue静态方法——你明明把array作为参数传进去了,但函数里却直接修改了全局的shoesArray而不是传入的数组参数。虽然现在你传入的就是shoesArray,这暂时没出问题,但这是不好的编程习惯,而且如果以后想修改其他数组的话就会出错。

把函数改成这样,使用传入的array参数:

static changeValue(array, index, property, content) {
  // 用传入的array代替全局的shoesArray
  array[index][property] = content;
  console.table(array);
}

2. 核心问题:你可能每次都在重新运行整个代码

这才是修改不保留的关键!如果你的测试方式是每次修改函数调用后,都重新运行整个代码文件,那每次运行时:

  • 所有myShoes1myShoes5都会被重新创建成初始状态
  • shoesArray也会被重新填充这些全新的初始对象
  • 之前的修改当然会被完全覆盖,看起来就像没保留一样

正确的测试方式

你需要在同一个执行会话中完成初始化和多次修改:

  • 如果是在浏览器控制台:
    1. 先把整个代码(除了最后那行Shoes.changeValue(...))粘贴进去运行,完成对象和数组的初始化
    2. 然后单独输入第一次修改调用:Shoes.changeValue(shoesArray, 3, "quantity", 100);,此时能看到修改生效
    3. 再输入第二次修改调用:比如Shoes.changeValue(shoesArray, 0, "valuePerItem", 50);,这时候你会发现第一次的修改还在,第二次的修改也生效了
  • 如果是用Node.js:
    1. 打开终端输入node进入REPL交互式环境
    2. 粘贴你的初始化代码(对象创建、数组填充,以及类定义)
    3. 然后依次输入多次changeValue调用,就能看到修改是持续保留的

验证修改效果

现在按照正确的测试方式来,你会发现对象的修改是会被保留的——因为你没有重新初始化对象和数组,只是在同一个数组和对象上做多次修改。

举个例子,在同一个会话中执行:

// 第一次修改
Shoes.changeValue(shoesArray, 3, "quantity", 100);
// 第二次修改
Shoes.changeValue(shoesArray, 3, "valuePerItem", 45);

你会看到shoesArray[3]quantity是100,valuePerItem变成了45,两次修改都被保留了。

内容的提问来源于stack exchange,提问作者CoderInNeed

火山引擎 最新活动