未捕获的TypeError:undefined不是函数

时间:2013-12-13 19:46:52

标签: javascript html

大家好,我现在是一名从我的书中学习项目的学生,这里是我遇到问题的代码。

for (var i = 0; i < numAsteroids; i++) {
    var radius = 5+(Math.random()*10);
    var x = canvasWidth+radius+Math.floor(Math.random()*canvasWidth);
    var y = Math.floor(Math.random()*canvasHeight);
    var vX = -5-(Math.random()*5);

    asteroids.push(new Asteroid(x, y, radius, vX));***<---line 21***
};

现在,当我跑步时,一直告诉我,我有一个:

Uncaught TypeError: undefined is not a function line 21.

但我的代码到底是怎样的,这是我不理解的。如果有人能帮我解决这个问题,那就太好了!

2 个答案:

答案 0 :(得分:1)

如果由于.push()方法错误来自此行:

asteroids.push(new Asteroid(x, y, radius, vX));

然后,问题是asteroids尚未初始化为数组,因此它没有方法.push()

您可以像这样初始化它:

var asteroids = [];
for (var i = 0; i < numAsteroids; i++) {
    var radius = 5+(Math.random()*10);
    var x = canvasWidth+radius+Math.floor(Math.random()*canvasWidth);
    var y = Math.floor(Math.random()*canvasHeight);
    var vX = -5-(Math.random()*5);

    asteroids.push(new Asteroid(x, y, radius, vX));
}

如果未定义Asteroid构造函数,也可能会出现此类错误。

答案 1 :(得分:0)

是否定义了Asteroid函数?

以下作品。

var asteroids = [],
    numAsteroids = 10,
    canvasWidth = 10,
    canvasHeight = 10,
    radius = 10;
for (var i = 0; i < numAsteroids; i++) {
    var radius = 5+(Math.random()*10);
    var x = canvasWidth+radius+Math.floor(Math.random()*canvasWidth);
    var y = Math.floor(Math.random()*canvasHeight);
    var vX = -5-(Math.random()*5);

    asteroids.push(new Asteroid(x, y, radius, vX));
};

// Is the Asteroid function/class defined?
function Asteroid(x, y, r, vX) {

}