javascript - 如何防止 javascript 在传递对象的子对象时通过引用传递

标签 javascript pass-by-reference pass-by-value

在我的项目中有一个单色屏幕,您可以写入和清除。在类里面,我有这两行代码用于清除屏幕。第一个将当前像素值从屏幕推送到堆栈上,以便稍后可以撤消清屏。第二行清除屏幕。问题是撤消堆栈正在获取对 this.pixels 的引用,而不是获取它当时的值。

this.pushUndo(this.pixels); //this.pixels is an array of ints
this.updateScreen(new Array(64*32)); //this.pixels changes at the end of this line but the undo stack shouldn't change its value

最佳答案

您可以使用slice创建副本:

const pixels0 = [0, 1, 2, 3, 4, 5];
const pixels1 = pixels0.slice(0);

// modify only index 0 of copy.
pixels1[0] = 1;

console.log(pixels0);
// expected output: Array [0, 1, 2, 3, 4, 5]

console.log(pixels1);
// expected output: Array [1, 1, 2, 3, 4, 5]

如果您需要深层副本,可以查看What is the most efficient way to deep clone an object in JavaScript?

关于javascript - 如何防止 javascript 在传递对象的子对象时通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54138791/

相关文章:

javascript - 如何通过从输入类型 ='file' 中进行选择来设置多个视频文件的预览

ruby - ruby 如何与数组的数组一起工作

c++ - 指针麻烦

javascript - angularjs-color-picker 在选择器中没有颜色

javascript - 如何用Google Chart Tools绘制 "age-gender"风格的柱状图?

javascript - SVG D3 图像调整大小问题

c++ - 在 C++ 中通过引用和值传递字符串

Java:方法中的按值传递引用

c++ - 防止将临时变量作为 const 引用传递的方法,该方法比删除 r 值重载更好地缩放

c++ - 如果静态变量只为程序的整个部分存储一个拷贝,为什么我不能使用静态变量交换 2 个数字?