未捕获的类型错误:undefined不是函数

Uncaught TypeError: undefined is not a function

本文关键字:undefined 函数 错误 类型      更新时间:2023-09-26

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

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***
};

现在,当我运行时,它一直告诉我我有一个:

未捕获的类型错误:undefined不是函数行21。

但我在书中有确切的代码,这是我不理解的。如果有人能帮我解决这个问题,那就太好了!

如果由于.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构造函数,也可能会出现这种类型的错误。

是否定义了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) {
}