基本上我想做的就是能够调用一个对象中引用的函数,无论出于何种原因我遇到了重大问题,chrome上的错误是:
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();
}
答案 0 :(得分:2)
你正在推动一个类,但是调用了一个对象的功能。这里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
未定义,这是代码段的预期。希望这会有所帮助。