Javascript 在数组中从存储在对象中的回调调用函数
基本上,我想做的就是能够调用对象中引用的函数,无论出于什么原因,我遇到了重大问题,chrome上的错误是: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
未捕获类型错误: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。。。明白了,对不起。我没注意到。