0

我正在尝试将数据模拟为通常会接收 JSON 解析数据结构的函数。运行此程序时,我在这里收到错误TypeError: can't convert undefined to objectdata.targets[i] = {

我究竟做错了什么?

function SendFakeTargets(maxTargets, interval) {
    var data = {};
    data.timestamp = +new Date;

    var time = data.timestamp * 0.0005;
    var x = Math.sin(time) * 192 + 256;
    var y = Math.cos(time * 0.9) * 192 + 256;

    console.log(x, y);

    for (var i = 0; i < maxTargets; i++) {
        console.log(i);

        data.targets[i] = { //error is here
            id: i,
            x: x + (i * 10),
            y: y + (i * 10)
        };
    }

    HandleTargetData(data);

    setTimeout("SendFakeTargets("+maxTargets+", "+interval+")", interval);
}
4

3 回答 3

5

你应该事先声明

data.targets = [];

data.targets[i]在循环内使用之前,否则data.targetsundefined. 用更短的方式你可以写

var data = {
    timestamp : +new Date,
    targets   : []
};

作为旁注,永远不要在setTimeout/Interval. 改为

 setTimeout(function() {
      SendFakeTargets(maxTargets, interval);
 }, interval);
于 2012-10-04T13:28:43.997 回答
1

我认为您需要在使用它之前初始化目标数组,因为它是未定义的。您将数据定义为

var data = {}

这将它声明为一个空对象,您正在使用它执行的任何其他操作都是动态添加的 - 数组需要在您可以调用其中的任何索引之前进行初始化。我相信你需要做的是:

var data = { targets: [] }

于 2012-10-04T13:30:40.240 回答
0

您从未将“data.targets”声明为对象,因此 javascript 不知道如何为其分配任何内容。

在您的代码顶部定义“目标”:

data.timestamp = +new Date;
data.targets = {} or [];
...
于 2012-10-04T13:29:17.520 回答