(Javascript)有没有办法为一个变量定义多个属性?
我再次来到这里,是为了在我的基于文本的游戏上获得帮助 最新版本:定义变量以更改全局变量的值 让我了解一下我的意思 所以,这给我带来了各种各样的问题,同时我试图建立一个可行的装备和购物系统 我有一组全局变量定义为:(Javascript)有没有办法为一个变量定义多个属性?,javascript,variables,global-variables,Javascript,Variables,Global Variables,我再次来到这里,是为了在我的基于文本的游戏上获得帮助 最新版本:定义变量以更改全局变量的值 让我了解一下我的意思 所以,这给我带来了各种各样的问题,同时我试图建立一个可行的装备和购物系统 我有一组全局变量定义为: var Armor = { ClothesName: "", HelmetName: "", BodyName: "", ArmName: "", WaistName: "", Le
var Armor = {
ClothesName: "",
HelmetName: "",
BodyName: "",
ArmName: "",
WaistName: "",
LegName: "",
BootsName: ""
}
var Weapons = {
SwordName: "",
RightHand: "",
ShieldName: "",
LeftHand: "",
BowName: "",
ArrowName: "",
NumberOfArrows: 0,
StaffName: ""
}
然后我就有了这样的护甲(这是整个问题的一部分):
或
我正在使用函数尝试将信息推送到全局变量:
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;
}
if(Warrior==true){
$(“您装备了装甲战士,正在进城的路上!按enter键。”).hide().insertBefore(“#占位符”).fadeIn(1000);//更改战士装备的名称
isArmorOn=真;
装备();
currentarea=“起点城门”;
document.getElementById(“currentarea”).innerHTML=currentarea;
回来
}
然后由HTML文本读取:
<div id="main_attributes">
<p>
Name: <span id="hero.Name">0</span>     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>
名称:0&emsp&emsp;性别:0
类别:0
健康状况:0
魔法:0
攻击力:0
防御:0
耐力:0
当前位置:0
头:0
装甲:0
手:0
腰围:0
腿:0
英尺:0
如果这个问题不能为我解决这两个问题,我将为我的商店系统问题创建一个单独的问题
我还没有在网上找到任何类似于这个问题的东西,所以我在这里发帖。这里有很多东西需要解包,我认为通过快速完成JavaScript教程可以解决您的许多问题,因为我认为很多原则(尤其是周围的类型)都无法解决
装甲
和武器
都是对象,并使用您在第一个代码段(衣服名
,剑名
等)中定义的属性实例化。除了存储分配给代码中定义的键名的值之外,它们什么都不做
我之所以强调这一点,是因为您似乎希望将装甲
和武器
视为类型,特别是允许您将它们细分为具有特定属性的装甲
和武器
实例的类,例如使用碎片
。要直接解决您的问题,您可以更改现有Armor
global上的属性,如下所示:
Armor.ClothesName = "Mangled Rags"
Armor.Defense = 0.25
您甚至可以定义一个新对象来存储破损的碎布属性,以避免重新键入它们:
var MangledRags = {
ClothesName: "Mangled Rags",
Defense: 0.25,
// more properties here...
}
function wearMangledRags() {
Armor.ClothesName = MangledRags.ClothesName;
Armor.Defense = MangledRags.Defense;
// etc.
}
这是糟糕的代码风格。不是以一种指手画脚的方式,而是因为大量的拷贝粘贴、代码重复和潜在的错误会让你的生活更加艰难。除了复习基本的JS原则、对象和类型外,我还建议阅读一篇文章
你可以将盔甲
和武器
视为它们应该具备的类型。要使用类
API,您需要ES6特性,但可以将它们与普通JavaScript一起使用,尽管这需要更复杂的技巧,并且需要理解
代码中还有一些其他错误,它们与误解类型和值之间的差异是一致的(例如,Warrior===true
将不起作用,除非Warrior
是一个布尔值-您不能以这种方式计算类类型,Armor.ClothesName=MangledRags;
将存储在MangledRags
变量中的对象分配到Armor
变量的ClothesName
属性中,我不这样做。)我真的建议你稍微温习一下基本的JavaScript——网上有大量的免费资源!我认为,在你对该语言的理解上稍微提高一点,你就能更容易地看到代码中的陷阱
如果您需要更多的帮助,请随时在这里给我留言,我很乐意为您指出正确的方向!我不认为像“全局”这样的指针是不好的将有助于解决您的问题,但您对JavaScript的广泛理解将使该程序变得轻松。我有一组全局变量,首先,您不应该有任何全局变量,但第二,您显示的是两个对象。真正糟糕的词语选择,我的意思是我有一组全局变量,我看到了你实际上是在告诉我这些都是对象。我可以说,我还是比一个新手好很多次,但随着我的不断学习。最终,我会达到一个程度,我可以将其中的许多对象私有化,但在这个阶段,我只是试着让它们按照我想要的方式工作。如果你告诉我“嘿,伙计,去看看对象是如何工作的!”很公平。我实际上是在说“嘿,伙计,去看看为什么环球是坏的!”。说真的,从全局代码开始,因为它们更简单,不会给你带来好的结果。事实证明,它们并不简单,你最终会把自己编码到它们的一个角落。总是从尽可能小的范围开始,只在需要时才扩展。明白。谢谢你的时间。
Armor.ClothesName = "Mangled Rags"
Armor.Defense = 0.25
var MangledRags = {
ClothesName: "Mangled Rags",
Defense: 0.25,
// more properties here...
}
function wearMangledRags() {
Armor.ClothesName = MangledRags.ClothesName;
Armor.Defense = MangledRags.Defense;
// etc.
}