从另一个 class 访问一个对象

Access an object from an other class

我有一个 JavaScript 函数来创建宇宙飞船对象。在我的函数 spaceship_build() 中,我用 pixijs 画了我的船。此外,我创建了一个对象 "spaceship_object" 来为对象提供一些属性,例如能量或船级。现在我遇到了问题,我无法访问其他 类 中的 spaceship_object 属性。如何从 spaceship_build 函数访问对象属性?

我的解决方案是,我将函数 fly_left 包含在函数 spaceship_build 中(闭包)。但这并不是很好,因为我还有其他功能也必须访问该对象。我的想法是 return 对象,但我不知道该怎么做。

$("#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像这样接受一个宇宙飞船对象作为参数:

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();
}

然后像这样传递spaceship_build创建的对象:

var spaceship_object = spaceship_build();
fly_left(spaceship_object)

确保在需要调用 fly_left

时保留对该宇宙飞船对象的引用

spaceship_build returns 一个可以存储在变量中的对象,就像我向您展示的那样 above.Make 所有需要该对象的函数都接受一个参数(在您的case 是你创建的 spaceship_object)

更新 您需要像这样将 spaceship_object 存储在任何事件处理程序(如 .click())之外:

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);
});

您无法访问原始宇宙飞船的原因(除了 click 处理程序上的错误语法外)是您每次单击 #b 按钮时都创建了一个新的对象实例(所以原来的飞船丢失了)

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

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