从另一个 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);
});
我有一个 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);
});