Javascript - 在运行中创建对象时出错

时间:2012-10-04 13:26:37

标签: javascript

我正在尝试将数据模拟到通常会接收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);
}

3 个答案:

答案 0 :(得分:5)

您之前应该声明

data.targets = [];

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

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

作为旁注,请勿在{{1​​}}中使用字符串。改为

setTimeout/Interval

答案 1 :(得分:1)

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

var data = {}

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

var data = { targets: [] }

答案 2 :(得分:0)

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

在代码的顶部,只需定义“目标”:

data.timestamp = +new Date;
data.targets = {} or [];
...