2016-03-17 4 views
0

Я использую JavaScript-классы, и у меня есть весло, которое имеет правильный метод рисования, но по какой-то причине моя функция moveBall испорчена. Может ли кто-нибудь указать, почему? Я получаю сообщение об ошибке, что moveBall() не является функцией.Методы класса ES6 не являются функцией

Редактировать: я включил еще один код, я вызываю 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); 
} 

}; 
+0

это прекрасно работает, как вы называете moveBall? –

+0

what'.moveBall'? показать еще код – dandavis

+1

Пожалуйста, прочитайте [mcve]. Это, безусловно, полезно, по крайней мере, включить строку, которая выдает ошибку. Я предполагаю, что вы делаете 'Ball.moveBall()'. Это просто неправильно, вам нужно сначала создать экземпляр «Ball». –

ответ

0

убедитесь, что экземпляр шара в объеме кода, который вы пытаетесь запустить, и попробуйте , чтобы увидеть, если это проблема компиляции, и убедитесь, что вы к нему доступ, как ball.moveball()

0

Если вы используете его как Ball.moveBall(), чем это неправильно, вы должны создать экземпляр класса мяча первым или использовать статические методы, как

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

1

Вы определяете main принять аргумент ball. Но вы никогда не звоните main, поэтому вы не можете передать ему аргумент.

Пока window.requestAnimationFrame(main); вызовет функцию, она ничего не пройдет.

Кажется, вы хотите обратиться к переменной ball, которая определена внутри init. В этом случае, удалить параметр ball из определения функции так, чтобы он не тень этой переменной:

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

Вы также не хотите назначить window.onload внутри main, потому, что Wouldn «Случись снова и снова.

Смежные вопросы