未找到JavaScript方法

JavaScript method isn't found

本文关键字:方法 JavaScript      更新时间:2023-09-26

我有一个" 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: Object 0没有方法'Tick'

虽然"InitRand(…)"方法,我以同样的方式添加到岩石,确实工作…

我做错了什么

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

应该使用普通的for循环:

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

你必须初始化你的变量:

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();
    }
}