Javascript 从其他类访问对象
我有一个JavaScript函数来创建一个spaceship对象。在我的函数spaceship_build()中,我用小精灵绘制我的飞船。另外,我创建了一个对象“spaceship_object”,给他们对象一些属性,比如能量或shipclass。现在我有一个问题,我不能访问我的其他类中的spaceship_对象属性。如何从spaceship_build函数访问对象属性 我的解决方案是,我将函数fly_包含在函数spaceship_构建(闭包)中。但这并不是很好,因为我还有其他函数必须访问该对象。我的想法是归还物品,但我不知道该怎么做Javascript 从其他类访问对象,javascript,jquery,html,pixi.js,Javascript,Jquery,Html,Pixi.js,我有一个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如果我的新解决方案对您有帮助,请告诉我