Node.js什么是对象克隆?
Node.js What is object Cloning?
我想知道为什么我们必须克隆对象而不是直接分配。
var obj1 = {x: 5, y:5};
var obj2 = obj1;
obj2.x = 6;
console.log(obj1.x); // logs 6
我已经得到了解决方案,但我想知道为什么obj2工作就像一个引用变量?
让我们一步一步地看看这段代码是怎么做的:
1 -
var obj1 = {x: 5, y:5};
创建对象{x: 5, y:5}
并将其引用存储在变量obj1
2 -
var obj2 = obj1;
创建变量obj2
,并将obj1
的值赋给该变量。由于obj1
的值是对一个对象的引用,那么obj2
现在将指向同一个对象。
3 -
obj2.x = 6;
修改被引用对象的属性x
的值
4 -
console.log(obj1.x); // logs 6
从obj1
引用的对象中打印x
属性。因为obj1
和obj2
都指向同一个位置,所以输出是6
。
这与任何使用对象引用的语言都具有相同的行为。Java, C, c++, c#等。在OOP语言中,通常有一个clone()
方法,它将逐个字段地进行复制。但是在JS的情况下,这样的方法不存在,您需要对每个元素进行深度复制。关于如何在JS中克隆元素,你可以在这里找到一组很好的答案:在JavaScript中深度克隆对象的最有效方法是什么?
相关文章:
- 使用JS将数组转换为json对象
- 查看JS对象的所有键,甚至是getter定义的键
- 在URL中传递JS对象
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- Node.js中的JavaScript原型对象效率
- 如何使用自定义功能覆盖时间轴对象.js时间轴对象的_repaintMinorText
- 如何在第三轴上旋转 3D 对象.js
- 三个中是否有容器类型对象.js来转换一组子对象
- 从 JSON 对象 - JS 周围删除双引号
- 删除对象JS中的节点
- 在对象数组中搜索非空对象JS
- 按未定义的值从数组中选择对象?JS
- 递归循环,直到我们'重新处理对象[JS]
- 向窗口对象-js添加新属性时得到通知
- 如何包含对象/关联数组到对象(js)
- 加载依赖于页面的面向对象JS属性的最好方法是什么?
- 合并新的数组对象到现有的对象js
- 获取带有下划线的数组中的对象.js
- 在带有下划线的嵌套集合中查找对象.js