我目前正在研究一个小项目,以学习Js和OOP。但是我有一个问题,让我解释一下不同的步骤:

1)我的构造函数:

function Ammo(ammoId,posX,posY){
    this.id=ammoId;
    this.x=posX;
    this.y=posY;
    $('body').append('<div class="ammo ammo'+this.id+'"></div>');
}

2)原型(prototype):
Ammo.prototype.position = function(){
    $('.ammo'+this.id).css({
        'top': this.y+"px",
        'left': this.x+"px"
    });
}

Ammo.prototype.ammomove = function(){
    this.y-=1;
    this.position();
}

3)通话:
ammo=[];
var a=1;
function createAmmo(){
    var ammoX=main.x;
    var ammoY=main.y;
    ammo[a] = new Ammo(a, ammoX, ammoY);
    ammo[a].position();
    var animAmmo= setInterval("ammo["+a+"].ammomove()",5);
    a++;
}
createAmmo();

我的程序运行完美。但是当我使用以下语法声明数组时:
var ammo = [];

它不起作用,并且我有错误“未定义弹药”,而这可行:
ammo = [];

有人有主意吗?谢谢 !

编辑:这是我的JsFiddle:https://jsfiddle.net/seabon/c057f1oj/

按空格键以调用createAmmo()

最佳答案

var关键字定义局部变量。这意味着变量仅在当前范围内可见。

当您使用ammo = [];时,它将创建全局变量,可以从createAmmo()进行访问。

但是,当您使用var ammo = [];时,它将创建局部变量。在同一个作用域中声明了createAmmo()方法,但是您无法访问它createAmmo正文的作用域。

将其作为参数传递给createAmmo

07-24 09:50