我有以下代码,在循环中创建对象,然后访问它们的值。现在我遇到了问题,访问对象本身可以,但不能访问包含该对象的数组。我在这里错过了什么吗?
camList = new Array();
for (var i=0; i<8; i++)
{
var camObj = new Camera(i);
camList.push(camObj);
console.log(camObj.id); //this works
console.log(camList[i].id); //this doesnt
}
PS:在此示例中 camObj.id 仅返回 i 的当前值。
PPS:我收到 TypeError:无法读取未定义的属性“id”。
<小时/>编辑:
我添加了完整的代码示例。
相机对象:
var Camera = function(id, cam)
{
this.id = id;
this.cam = cam;
this.res = {
"x" : this.cam.get(CV_CAP_PROP_FRAME_WIDTH),
"y" : this.cam.get(CV_CAP_PROP_FRAME_HEIGHT)
};
this.overlayData = new Array();
};
exports.Camera = Camera;
主要代码:
var cv = require("opencv-node");
var Camera = require("./cameraModule").Camera;
var camList = new Array();
for (var i=0; i<8; i++)
{
var capture = new cv.VideoCapture();
capture.open(i);
if (capture.isOpened())
{
var camObj = new Camera(i, capture);
camList.push(camObj);
console.log(camList[i].id); //Here is the problem
}
}
最佳答案
在每次循环迭代中,您都会检查capture.isOpened()
。如果这是 false
会发生什么?
循环将继续而无需将任何内容插入camList
。在下一个循环中,i
将递增。假设capture.isOpened()
变为true
。当您插入数组时,i
将不会与您刚刚添加的元素对齐。 i
一个(或多个)索引太大!
不要执行camList[i].id
,而是尝试执行以下操作:
camList[camList.length - 1].id
关于javascript - 无法访问数组中的对象,只能访问对象本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18490206/