0

通常はJSONで解析されたデータ構造を受け取る関数にデータをシミュレートしようとしています。これを実行すると、ここでエラーが発生TypeError: can't convert undefined to objectします:data.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 に答える