我试图在Javascript中编写实现图形(数据结构)。为此,我有一个名为Graph
的函数,它将此矩阵存储在名为this.adjMatrix
的属性的2D数组中。它还有一堆方法。
我还希望创建一个称为残差图的东西,它采用Graph
个对象,为自己创建this.adjMatrix
的副本,并修改此副本,并将其保存在其中拥有this.adjMatrix
属性。
现在,我希望残差图也可以访问所有Graph
函数,因此我将Graph
作为ResidualGraph
的原型。然而,这带来了一个问题。以下是我的实现:
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
。为什么会这样?
答案 0 :(得分:0)
事实证明问题不在于原型!事实上,.slice()只创建一个浅拷贝。因此,this.adjMatrix
中的ResidualGraph
是this.adjMatrix
中的Graph
。