我正在弄乱Javascript“类”,并且我有一个桨,桨具有适当的绘制方法,但是由于某种原因,我的moveBall函数被弄乱了。谁能指出原因?我收到一条错误消息,说moveBall()不是函数。

编辑:我包括更多的代码,我调用init()来启动所有程序。

class Ball {
    constructor(x, y, r, sAngle, rAngle) {
        this.x = x;
        this.y = y;
        this.r = r;
        this.sAngle = sAngle;
        this.rAngle = rAngle;
        this.speed = null;
    }

    drawBall() {
        ctx.beginPath();
        ctx.arc(this.x, this.y, this.r, this.sAngle, this.rAngle);
        ctx.fillStyle = "#FF0000";
        ctx.fill();
    }
    moveBall() {
        this.x += this.speed;

    }

}


function init() {
    var  ball = new Ball(c.height / 2, c.width / 2, 10, 0, 2 * Math.PI);
    var paddleLeft = new Paddle(0, 0, 20, 100);
    ball.ballPhysics = 1.0;
    draw(ball, paddleLeft);
    main(ball);
}


window.main = function (ball) {
    window.requestAnimationFrame(main);
    ball.moveBall();
    window.onload = function () {
    document.addEventListener('keydown', function (event) {
        if (event.keyCode === 65) {

        }
    }, false);
}

};

最佳答案

如果您像Ball.moveBall()这样使用它,那是不正确的,那么您必须首先实例化Ball类或使用静态方法,例如

class A {
 static f() {
 }
}

并像
A.f();
否则请检查以下代码段

class Ball {
  constructor(x, y, r, sAngle, rAngle) {
    this.x = x;
    this.y = y;
    this.r = r;
    this.sAngle = sAngle;
    this.rAngle = rAngle;
    this.speed = null;
  }

  drawBall() {
    ctx.beginPath();
    ctx.arc(this.x, this.y, this.r, this.sAngle, this.rAngle);
    ctx.fillStyle = "#FF0000";
    ctx.fill();
  }
  moveBall() {
    this.x += this.speed;

  }
}

var greenBall = new Ball(0, 0 , 10, 0, 0);

greenBall.speed = 5;

greenBall.moveBall();

document.write(greenBall.x);

09-20 16:04