Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中从存储在对象中的回调调用函数_Javascript_Canvas - Fatal编程技术网

Javascript 在数组中从存储在对象中的回调调用函数

Javascript 在数组中从存储在对象中的回调调用函数,javascript,canvas,Javascript,Canvas,基本上,我想做的就是能够调用对象中引用的函数,无论出于什么原因,我遇到了重大问题,chrome上的错误是: 未捕获类型错误:obj.draw不是functionrender@main.js:46main@main.js:16这可能意味着它是私有的?我不确定,反正这里有个MVCE var bullets = []; bullets.push(bullet) ;(function() // I know this is a little overkill for an mvce { funct

基本上,我想做的就是能够调用对象中引用的函数,无论出于什么原因,我遇到了重大问题,chrome上的错误是:
未捕获类型错误:obj.draw不是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项目符号=[];
项目符号。按(新项目符号())
;(function()//我知道这对mvce来说有点过分了
{
函数main()
{
window.requestAnimationFrame(主);
render();
}
main();
})();
函数bullet()
{
这个.x=canvas.width/2;
此.y=canvas.height/2;
this.move=函数()
{
++这个.y;
};
this.draw=函数()
{
ctx.beginPath();
ctx.rect(this.x,this.y,5,10);
ctx.closePath();
ctx.stroke();
};
}
函数render()
{
对于(让子弹的obj)
obj.draw();

}
尝试使用
var
更改
let
?@PraveenKumar
对于(让子弹的目标)
,当循环迭代通过时,它保留对每个子弹的引用。Yea Yea。。。明白了,对不起。我没注意到。