我有一个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();
}
答案 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);
});