gpt4 book ai didi

javascript - 原型(prototype): Why does modifying "child" object instance also modifies "parent" object instance?

转载 作者:行者123 更新时间:2023-11-28 05:09:25 26 4
gpt4 key购买 nike

我正在尝试用 Javascript 编写实现图形(数据结构)。为此,我有一个名为 Graph 的函数将该矩阵存储在名为 this.adjMatrix 的属性中的二维数组中。它还有很多方法。

我还想创建一个称为残差图的东西,它需要 Graph对象,创建 this.adjMatrix 的副本为其自身,并修改此副本,并将其保存在它自己的 this.adjMatrix 中属性。

现在,我希望残差图能够访问所有 Graph的功能也是如此,所以我做了 Graph ResidualGraph 的原型(prototype)。然而,这却带来了一个问题。下面是我的实现:

function ResidualGraph(G) {

this.adjMatrix = G.adjMatrix.slice();
this.idList = G.idList.slice();

this.init = function() {
for (i = 0; i < this.adjMatrix.length; i++) {
for (j = 0; j < this.adjMatrix[i].length; j++) {
if (i != j && G.adjMatrix[i][j] != -Infinity && G.adjMatrix[i][j] != 0) {
this.adjMatrix[j][i] = 0;
};
};
};
};
this.init();
};

ResidualGraph.prototype = new Graph();
G = new Graph();
R = new ResidualGraph();

init()方法运行(在创建 ResidualGraph 的实例时) ResidualGraph 的实例有其this.adjMatrix根据需要修改。然而, Graph 的实例中传递的内容有其 this.adjMatrix由于某种原因修改。为什么会出现这种情况?

最佳答案

事实证明问题不在于原型(prototype)!事实很简单,.slice() 仅创建浅拷贝。因此,ResidualGraph 中的 this.adjMatrix 就是 Graph 中的 this.adjMatrix

关于javascript - 原型(prototype): Why does modifying "child" object instance also modifies "parent" object instance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41497435/

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