gpt4 book ai didi

javascript - Javascript 是否可以告诉一个对象停止与另一个对象有引用行为

转载 作者:行者123 更新时间:2023-11-28 20:40:46 25 4
gpt4 key购买 nike

重新开始编写大量 Javascript 并尝试更好地理解 Javascript 对象。我之前问过上一个问题,但这个问题不同。我可以断开对象之间存在的引用关系吗?

例如:

var objA={};
objA.my_name='Joe';
var objB=objA;
objB.my_name="jake"; // objA.my_name="jake"
objB.something="this is something";
objA.last_name="Jackson";
console.log(objA.something); // "this si something" can add to parent object at runtime
console.log(objB.last_name); // "Jackson" can add to child object at runtime
// now I'd like to cut off objB from objA such that:
objB.cell_phone='323-213-2323';
console.log(objA.cell_phone); // '323-213-2323' but would like undefined; would like this behavior

提前致谢

最佳答案

您无法告诉对象停止具有引用行为。这就是 JavaScript 的工作方式。

您可以复制一个对象,以便创建一个与原始对象具有相同属性的全新对象,但它是一个完全独立的对象,不具有引用行为。

可以通过简单地迭代对象的属性并将每个属性分配给新对象来创建浅复制。

function shallowCopy(src, dest) {
for (var prop in src) {
if (src.hasOwnProperty(prop)) {
dest[prop] = src[prop];
}
}
}

数组的浅拷贝可以这样完成:

var arr = [1,2,3];
var copyArr = [].slice.call(arr, 0);

深复制(其中对象或数组本身的属性也被复制)需要更多工作,因为您本质上必须检查它们是否是对象或数组,然后递归地复制它们及其内容。如此处所示的浅拷贝要容易得多,而且如果您知道数据内容通常就足够了。

<小时/>

如果你想了解高级版本的复制(包括深度复制),可以查看 jQuery 的 .extend() 函数的代码 here 。点击该链接并搜索 fn.extend

关于javascript - Javascript 是否可以告诉一个对象停止与另一个对象有引用行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14444972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com