Javascript 从其他类访问对象

Javascript 从其他类访问对象,javascript,jquery,html,pixi.js,Javascript,Jquery,Html,Pixi.js,我有一个JavaScript函数来创建一个spaceship对象。在我的函数spaceship_build()中,我用小精灵绘制我的飞船。另外,我创建了一个对象“spaceship_object”,给他们对象一些属性,比如能量或shipclass。现在我有一个问题,我不能访问我的其他类中的spaceship_对象属性。如何从spaceship_build函数访问对象属性 我的解决方案是,我将函数fly_包含在函数spaceship_构建(闭包)中。但这并不是很好,因为我还有其他函数必须访问该对象

我有一个JavaScript函数来创建一个spaceship对象。在我的函数spaceship_build()中,我用小精灵绘制我的飞船。另外,我创建了一个对象“spaceship_object”,给他们对象一些属性,比如能量或shipclass。现在我有一个问题,我不能访问我的其他类中的spaceship_对象属性。如何从spaceship_build函数访问对象属性

我的解决方案是,我将函数fly_包含在函数spaceship_构建(闭包)中。但这并不是很好,因为我还有其他函数必须访问该对象。我的想法是归还物品,但我不知道该怎么做

$("#b_schiff_beantragen").click(function() { 
if (!spaceship_object) { 
spaceship_object = spaceship_build(); 

} 
spaceship_draw(spaceship_object); 
$(".energie").css("visibility", "visible"); 
$("#b_schiff_zerstoeren").css("visibility", "visible"); 
$("#energiewertdiv").css("visibility", "visible"); 
});

  $("#b_nav_li").click(function() {

    flyleft(spaceship_object);
    console.log("Linksflug");
    console.log(spaceship_object.energy);
}); 



function flyleft(spaceship_object) {
    if (ship_energy(spaceship_object.energy) == true) {
    spaceship.x -= 50;  

    spaceship_object.energy -= 1;
    ship_energy(spaceship_object.energy);
    }
    mapborder850();
}

使fly_left接受spaceship对象作为参数,如下所示:

function fly_left(spaceship_object) {
    if (ship_energy(spaceship_object.energy) == true) {
        spaceship.x -= 50;  
        spaceship_object.energy -= 1;
        ship_energy(spaceship_object.energy);
    }
    mapborder850();
}
var spaceship_object = spaceship_build();
fly_left(spaceship_object)
function flyleft(spaceship_object) {
    if (ship_energy(spaceship_object.energy) == true) {
        spaceship.x -= 50;
        spaceship_object.energy -= 1;
        ship_energy(spaceship_object.energy);
    }
    mapborder850();
}

var spaceship_object = spaceship_build();

$("#b_left").click( function() {
    flyleft(spaceship_object);
    console.log(spaceship_object.energy);
});
然后像这样传递由
spaceship\u build
创建的对象:

function fly_left(spaceship_object) {
    if (ship_energy(spaceship_object.energy) == true) {
        spaceship.x -= 50;  
        spaceship_object.energy -= 1;
        ship_energy(spaceship_object.energy);
    }
    mapborder850();
}
var spaceship_object = spaceship_build();
fly_left(spaceship_object)
function flyleft(spaceship_object) {
    if (ship_energy(spaceship_object.energy) == true) {
        spaceship.x -= 50;
        spaceship_object.energy -= 1;
        ship_energy(spaceship_object.energy);
    }
    mapborder850();
}

var spaceship_object = spaceship_build();

$("#b_left").click( function() {
    flyleft(spaceship_object);
    console.log(spaceship_object.energy);
});
无论何时需要调用
fly\u left

spaceship\u build
返回一个对象,您可以将其存储在一个变量中,如我上面所示。使所有需要该对象的函数都接受一个参数(在您的例子中,该参数就是您创建的spaceship\u对象)

更新 您需要从任何事件处理程序(如.click())中存储spaceship_对象,如下所示:

function fly_left(spaceship_object) {
    if (ship_energy(spaceship_object.energy) == true) {
        spaceship.x -= 50;  
        spaceship_object.energy -= 1;
        ship_energy(spaceship_object.energy);
    }
    mapborder850();
}
var spaceship_object = spaceship_build();
fly_left(spaceship_object)
function flyleft(spaceship_object) {
    if (ship_energy(spaceship_object.energy) == true) {
        spaceship.x -= 50;
        spaceship_object.energy -= 1;
        ship_energy(spaceship_object.energy);
    }
    mapborder850();
}

var spaceship_object = spaceship_build();

$("#b_left").click( function() {
    flyleft(spaceship_object);
    console.log(spaceship_object.energy);
});
无法访问原始宇宙飞船的原因(除了
单击
处理程序上的错误语法外)是每次单击
#b
按钮时都创建了一个新的对象实例(因此原始宇宙飞船丢失)

或者,如果您想在单击事件期间初始化宇宙飞船,但具有全局引用,请尝试:

var spaceship_object = null;
$("#b_left").click( function() {
    if(!spaceship_object) spaceship_object = build_spaceship();
    flyleft(spaceship_object);
    console.log(spaceship_object.energy);
});

这不起作用,因为我有一个jquery<代码>var spaceship_object=spaceship_build()$(#b#u left”)。单击(spaceship_对象,函数(){flyleft(spaceship_build());console.log(spaceship_object.energy);};函数flyleft(spaceship_object){if(ship_energy(spaceship_object.energy)=true){spaceship.x-=50;spaceship_object.energy-=1;ship_energy(spaceship_object.energy)}mapborder850()}@Whiteheat我将在几分钟内更新我的答案使用这个解决方案,在我按下按钮之前,宇宙飞船已经建造好了。该变量通过初始化自动启动spaceship_build()函数。这就是我尝试将变量放入.click函数的原因。确定,然后将飞船初始化移到.click函数中event@Whiteheat如果我的新解决方案对您有帮助,请告诉我