Javascript ES6类方法不是函数

Javascript ES6类方法不是函数,javascript,html,ecmascript-6,Javascript,Html,Ecmascript 6,我正在乱搞Javascript“类”,我有一个划桨,它有一个合适的方法来绘制,但由于某种原因,我的moveBall函数被弄乱了。有人能指出原因吗?我得到一个错误,说moveBall()不是一个函数 编辑:我包含了更多的代码,我调用init()来开始这一切 class Ball { constructor(x, y, r, sAngle, rAngle) { this.x = x; this.y = y; this.r = r;

我正在乱搞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实例,并尝试
var moveball=function(){this.x+=this.speed;}
若要查看它是否是编译问题,并确保您像访问ball.moveball()一样访问它,若您像使用ball.moveball()一样使用它,则必须首先实例化ball类或使用静态方法,如

class A {
 static f() {
 }
}
打个电话

A.f()

否则,请检查下面的代码段

班级舞会{
构造函数(x、y、r、sAngle、rAngle){
这个.x=x;
这个。y=y;
这个。r=r;
this.sAngle=sAngle;
this.rAngle=rAngle;
这个速度=零;
}
塔威尔(){
ctx.beginPath();
ctx.arc(this.x,this.y,this.r,this.sAngle,this.rAngle);
ctx.fillStyle=“#FF0000”;
ctx.fill();
}
移动球(){
这个.x+=这个.speed;
}
}
var greenBall=新球(0,0,10,0,0);
greenBall.speed=5;
greenBall.moveBall();

document.write(greenBall.x)
您可以定义
main
来接受参数
ball
。但您从未调用过
main
,因此无法向其传递参数

window.requestAnimationFrame(主)
将调用该函数,但不会向其传递任何内容

您似乎希望引用
init
中定义的
ball
变量。在这种情况下,请从函数定义中删除参数
ball
,使其不会遮挡该变量:

window.main = function() { ... };


您也不希望在
main
中指定给
window.onload
,因为这样不会重复发生

这很好,你怎么称呼moveBall?什么
。moveBall
?显示更多代码,请阅读。至少包含抛出错误的行肯定是有帮助的。我假设您正在执行
Ball.moveBall()
。这完全是错误的,你需要先创建一个
Ball
的实例。我创建了一个Ball的实例,我编辑了我的原始帖子以包含更多的代码。
requestAnimationFrame(main)
将导致调用
main
函数时不使用
ball
参数。