0

只是重新开始做大量的 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

提前谢谢

4

1 回答 1

3

您不能告诉对象停止具有引用行为。这就是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);

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


如果您想查看高级版本的复制(包括深度复制),您可以在此处.extend()查看 jQuery函数的代码。按照该链接并搜索。fn.extend

于 2013-01-21T18:31:12.073 回答