수조에서 대상에 저장된 리셋 호출 함수

질문:

기본적으로 내가 하고 싶은 것은 대상에서 인용한 함수를 호출할 수 있는 것이다. 어떤 이유로든 중대한 문제에 부딪혔을 때 크롬의 오류는 다음과 같다.Uncaught TypeError: obj.draw is not a functionrender @ main.js:46main @ main.js:16 아마도 이것은 그것이 개인이라는 것을 의미할 것이다.나는 확실하지 않다. 어쨌든 여기에 MVCE가 있다
var bullets = [];
bullets.push(bullet)

;(function() // I know this is a little overkill for an mvce
{
  function main()
  {
    window.requestAnimationFrame( main );
    render();
  }
  main();
})();

function bullet()
{
  this.x = canvas.width/2;
  this.y = canvas.height/2;
  this.move = function()
  {
    ++this.y;
  };
  this.draw = function()
  {
    ctx.beginPath();
    ctx.rect(this.x, this.y, 5, 10);
    ctx.closePath();
    ctx.stroke();
  };
}


function render()
{
  for( let obj of bullets )
      obj.draw();
}

답안

클래스를 전송하고 있지만 대상의 함수를 호출합니다.여기bullet는 하나의 종류이지 그것의 실례화가 아니다.실례화된 변수만 이 함수를 가지고 있다.코드를 다음과 같이 변경합니다.
bullets.push(new bullet());
함수를 맨 위에 표시합니다.(필요 없다).
var bullets = [];
bullets.push(new bullet())

;(function() // I know this is a little overkill for an mvce
{
  function main()
  {
    window.requestAnimationFrame( main );
    render();
  }
  main();
})();

function bullet()
{
  this.x = canvas.width/2;
  this.y = canvas.height/2;
  this.move = function()
  {
    ++this.y;
  };
  this.draw = function()
  {
    ctx.beginPath();
    ctx.rect(this.x, this.y, 5, 10);
    ctx.closePath();
    ctx.stroke();
  };
}


function render()
{
  for( let obj of bullets )
      obj.draw();
}
위의 코드 버퍼링 canvas 은 정의가 없습니다. 이것은 코드 세그먼트가 정의해야 할 것입니다.도움이 되었으면 좋겠습니다.