数组值突发异常:Vector类转换坐标数组结果不符求助
排查Vector数组转换后值异常的问题
看起来你的setArray函数逻辑本身没毛病——遍历坐标数组,每个元素实例化Vector并推入新数组,按道理传入[[130,130]]应该得到x=130、y=130的向量才对。出现值变成110的情况,大概率是其他地方的代码影响了结果,给你几个排查方向:
- 检查Vector类的其他方法:你提到有
magnitude之类的向量相关函数,有没有可能这些方法里不小心修改了实例的x或y值?比如某个方法里写了this.x = this.x - 20这类偏移逻辑,导致实例创建后被悄悄修改了。 - 确认传入的coords数组是否被提前修改:调用
setArray([[130,130]])的时候,这个字面量数组理论上是全新的,但如果你的代码里有其他地方(比如调用setArray之前的逻辑)不小心修改了这个数组的元素,比如coords[0][0] = 110,那自然会得到错误的向量。可以在setArray函数开头加一行console.log(coords),看看传入时的数组值是不是已经变成110了。 - 排查全局变量冲突或构造函数书写错误:虽然你的构造函数写的是
this.x = x; this.y = y;,但有没有可能不小心漏写了this.?比如写成x = x;(这其实是给全局变量x赋值),而全局的x/y刚好是110?不过这种情况概率低,但可以检查下构造函数的代码细节。 - 检查控制台输出的时效性:有时候浏览器控制台会“延迟”显示对象的值——比如你创建向量后,又在后面的代码里修改了这个向量的x/y,控制台显示的会是修改后的值,而不是创建时的初始值。可以在
push之后立刻打印arrayOfVectors[i],看看当时的值是不是正确的。 - 确认是否有代码重写了Vector构造函数:有没有可能在
setArray执行之后,有其他代码重新定义了Vector函数?比如后面又写了function Vector(x,y) { this.x = 110; this.y = 110; },这种情况下虽然实例是之前创建的,但如果控制台查看时引用的是新的构造函数,可能会显示异常(不过这种情况比较少见)。
你可以先从第一个和第二个方向排查,大概率能找到问题所在。
内容的提问来源于stack exchange,提问作者Ptero
相关产品推荐
相关产品推荐

