找不到JavaScript方法

时间:2011-11-05 17:47:36

标签: javascript arrays object

我有一个'对象':

function Rock()
{
    this.size = 30.0;
    this.body;
    this.isDead = false;

    this.vertexPosBuffer;
    this.vertexColBuffer;
}

我给出了一个功能:

Rock.prototype.Tick = function()
{
    this.body.ApplyForce(new b2Vec2(0, 10), this.body.GetPosition());
}

然后我制作了一系列的岩石:

var rocks;
function NewRandomRock()
{
    var newRock = new Rock;
    var pos = new b2Vec2;
        pos.x = Math.random()*(gl.viewportWidth+1);
        pos.y = Math.random()*(gl.viewportHeight+1);
    newRock.InitRand(pos);
    rocks.push(newRock);
}

然后我调用Tick函数:

function TickRocks()
{
    for(var rock in rocks)
    {
        rock.Tick();
    }
}

现在出现问题,我收到以下错误:

  

未捕获的TypeError:对象0没有方法'Tick'

虽然我以同样的方式添加到Rock的“InitRand(...)”方法确实有用......

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您的问题是使用for in不是为了迭代数组。它用于枚举对象属性。

你应该使用普通的for循环:

for(var i = 0; i < rocks.length; i++) {
    rocks[i].Tick();
}

答案 1 :(得分:1)

您必须初始化变量:

function Rock() {
    this.size = 30.0;
    this.body = {};     //Initialize at an object
    ...
}
var rocks = [];   //Initalize an array
function NewRandomRock() {
    ...

此外,由于rocks是一个数组,我建议使用for( ; ; )循环:

function TickRocks()
{
    for(var i=0, l=rocks.length; i<l; i++)
    {
        var rock = rocks[i];
        rock.Tick();
    }
}