自 Chrome 22升级(9月25日稳定发布)以来,我发现我的程序中有一个我不明白的新错误。
我的javascript程序执行以下操作:
arraybuffer
获取XMLHttpRequest
的二进制文件(STL网格)。DataView
对其进行解析,然后调用data.getFloat32(offset, isLittleEndian)
和data.getUint32(offset, isLittleEndian)
等阅读方法。解析数据存储在用于加载和解析文件的对象数组中。当加载所有文件时,我会遍历每个加载器并使用解析后的数据在for循环中创建对象,如下所示:
var geom = new THREE.Geometry();
for(var v = 0; v < this.result[0].length; v++) {
geom.vertices.push(new THREE.Vertex(new THREE.Vector3(this.result[0][v][0],
this.result[0][v][1],
this.result[0][v][2])));
}
for(var f = 0; f < this.result[1].length; f++) {
geom.faces.push(new THREE.Face3(this.result[1][f][0],
this.result[1][f][1],
this.result[1][f][2]));
}
问题是在这些循环之后,数组geom.faces
为undefined
我找到了一种方法来纠正这种竞争,但我不明白为什么它会改变任何东西:我将数组的长度存储在变量中,如下所示:
var geom = new THREE.Geometry();
var vl = this.result[0].length; // <=== | these are the added variables
var fl = this.result[1].length; // <=== | that fix the bug
for(var v = 0; v < vl; v++) {
geom.vertices.push(new THREE.Vertex(new THREE.Vector3(this.result[0][v][0],
this.result[0][v][1],
this.result[0][v][2])));
}
for(var f = 0; f < fl; f++) {
geom.faces.push(new THREE.Face3(this.result[1][f][0],
this.result[1][f][1],
this.result[1][f][2]));
}
如果有人能够向我解释会发生什么,以及为什么我会在我的代码的第一个版本中丢失我的数组,我将非常感激。