(Javascript)有没有办法为一个变量定义多个属性?



我再次来到这里,为我的基于文本的游戏寻求帮助。

最新问题:定义变量以更改全局变量的值。

让我了解一下我的意思。

所以,这给我带来了各种各样的问题,同时试图建立一个可行的装备和购物系统。

我有一组全局变量定义为:

var Armor = {
ClothesName: "",
HelmetName: "",
BodyName: "",
ArmName: "",
WaistName: "",
LegName: "",
BootsName: ""
}
var Weapons = {
SwordName: "",
RightHand: "",
ShieldName: "",
LeftHand: "",
BowName: "",
ArrowName: "",
NumberOfArrows: 0,
StaffName: ""
}

然后我把我的盔甲设置成这样(这是整体问题的部分):

1.) There is no way I can see to plug the values into the global variable:
var MangledRags = {
Name: "Mangled Rags" //Name of the Armor.
Defense: 0.25        //Boost to defense.
}

2.) The Armor.Name is pushed, but the hero.Defense is neglected:
var MangledRags;
MangledRags = 
Armor.ClothesName = "Mangled Rags", //Name of the Armor pushed
hero.Defense += 0.25;               //Increase to Hero's defense when worn.

我正在使用一个函数来尝试将信息推送到全局变量:

function equip() {
if (Warrior == true) {
Armor.ClothesName = MangledRags;
document.getElementById("Armor.ClothesName").innerHTML = Armor.ClothesName;
document.getElementById("hero.Defense").innerHTML = hero.Defense;
}

在这里阅读:

if (Warrior == true) {
$("<p>You equipped your armor warrior, and are on your way to town! Press <u><b>enter</b></u>.</p>").hide().insertBefore("#placeholder").fadeIn(1000); //Change the name of the warrior equipment
isArmorOn = true;
equip();
currentarea = "Starter Town Gates";
document.getElementById("currentarea").innerHTML = currentarea;
return;
}

这反过来又由 HTML 文本读取:

<div id="main_attributes">
<p>
Name: <span id="hero.Name">0</span> &emsp; &emsp; Gender: <span id="hero.Gender">0</span><br />
Class: <span id="hero.Class">0</span><br /><br />
Health: <span id="hero.Health">0</span><br />
Magic: <span id="hero.Magic">0</span><br />
Attack Power: <span id="hero.Attack">0</span><br/>
Defense: <span id="hero.Defense">0</span><br />
Endurance: <span id="hero.Endurance">0</span><br />
Current Location: <span id="currentarea">0</span>
</p>
</div>
<div id="inv_left_left">
<p>
Head: <span id="Armor.HelmetName">0</span><br />
Armor: <span id="Armor.BodyName">0</span><br />
Hands: <span id="Armor.ArmName">0</span><br/>
Waist: <span id="Armor.WaistName">0</span><br />
Legs: <span id="Armor.LegName">0</span><br />
Feet: <span id="Armor.BootsName">0</span><br />
</p>
</div>

如果这个问题不能为我解决这两个问题,我将为我的 Shop 系统问题创建一个单独的问题。

我还没有在网上找到任何类似这个问题的东西,所以这就是我在这里发布的原因。

这里有相当多的东西需要解开,我认为你的很多问题都可以通过完成一个快速的JavaScript教程来解决,因为我认为很多原则(尤其是周围的类型)都躲避了你。

ArmorWeapons都是对象,并使用您在第一个代码段(ClothesNameSwordName等)中对它们定义的属性进行实例化。它们除了存储分配给您在代码中定义的键名称的值外,什么也不做。

我强调这一点是因为您似乎希望将ArmorWeapons视为类型,特别是允许您将它们子类化为具有特定属性的ArmorWeapon实例的类,例如MangledRags.若要直接解决问题,可以更改现有Armor全局的属性,如下所示:

Armor.ClothesName = "Mangled Rags"
Armor.Defense = 0.25

您甚至可以定义一个新对象来存储损坏的 rags 属性,以避免重新键入它们:

var MangledRags = {
ClothesName: "Mangled Rags",
Defense: 0.25,
// more properties here...
}
function wearMangledRags() {
Armor.ClothesName = MangledRags.ClothesName;
Armor.Defense = MangledRags.Defense;
// etc.
}

这是糟糕的代码风格。不是以手指摇摆的方式,而是因为你会因为大量的复制粘贴、代码重复和潜在的错误而让自己的生活变得更加艰难。除了复习基本的JS原则,对象和类型之外,我还建议阅读有关类的入门。

您可以将ArmorWeapons视为它们应该存在的类型,并使用子类化来定义这些类型的实例。您将需要 ES6 功能才能使用classAPI,但可以在原版 JavaScript 中使用它们,尽管这更棘手并且需要了解原型继承。

代码中还有其他一些错误,这些错误与误解类型和值之间的差异相同(例如 除非Warrior是布尔值,否则Warrior === true不起作用 - 你不能以这种方式计算类类型,Armor.ClothesName = MangledRags;将存储在MangledRags变量中的对象分配给Armor变量的ClothesName属性,我认为这不是你想要的)。我真的建议你复习一下基本的JavaScript - 网上有大量的免费资源!我认为,随着您对语言的理解迈出一小步,您将能够更轻松地看到代码的陷阱。

如果您需要更多帮助来分解这里的任何内容,请随时在这里给我发消息 - 我很乐意为您指出正确的方向!我不认为像"全局是坏的"这样的指针会帮助你解决问题,但是在你的JavaScript理解方面的广泛收获将使这个程序变得轻而易举。

相关内容

  • 没有找到相关文章