从其他类访问对象

时间:2018-03-30 11:15:32

标签: javascript jquery html5 pixi.js

我有一个JavaScript函数来创建一个太空船对象。在我的函数spaceship_build()中,我用pixijs绘制我的船。另外,我创建了一个对象“spaceship_object”,为它们提供了一些属性,如能量或船级。现在我遇到了问题,我无法访问其他类中的spaceship_object属性。如何从spaceship_build函数访问对象属性?

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

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

1 个答案:

答案 0 :(得分:1)

让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返回一个对象,您可以将其存储在我上面显示的变量中。使所有需要该对象的函数接受一个参数(在您的情况下是您创建的spaceship_object)< / p>

<强>更新 您需要将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);
});