[英]access object property by variable with more than one “nodes” in javascript
[英](Javascript) Is there a way to define more than one property to a variable?
我再次來到這里,以獲取有關基於文本的游戲的幫助。
最新問題:定義變量以更改全局變量的值。
讓我摘錄一下我的意思。
因此,這在試圖建立一個可行的設備和購物系統的同時,也給我帶來了各種各樣的問題。
我有一組全局變量定義為:
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>     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教程來解決許多問題,因為我認為很多原理(尤其是周圍的類型)正在使您難以理解。
Armor
和Weapons
都是對象 ,並使用您在第一個代碼段( ClothesName
, SwordName
等)中ClothesName
定義的屬性實例化。 除了存儲分配給您在代碼中定義的鍵名的值外,它們什么也不做。
我強調這一點是因為似乎您希望將Armor
和Weapons
視為類型 ,特別是允許您將它們子類化為具有特定屬性的Armor
和Weapon
實例的類,例如MangledRags
。 為了直接解決您的問題,您可以像下面這樣更改現有Armor
全局屬性:
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原則,對象和類型之外,我建議閱讀有關class的入門文章 。
您可以將Armor
和Weapons
視為它們應為的類型,並使用子類定義這些類型的實例 。 您將需要ES6功能來使用class
API,但是可以將它們與原始 JavaScript一起使用,盡管比較棘手,並且需要了解原型繼承 。
您的代碼中還有其他一些錯誤,它們都是基於誤解類型和值之間的區別而發生的(例如Warrior === true
除非Warrior
是布爾值,否則將不起作用-您無法通過這種方式評估類類型, Armor.ClothesName = MangledRags;
被分配存儲在對象MangledRags
可變進ClothesName
的財產Armor
變量,我不認為這是你想要的)。 我真的建議您稍微學習一下基本的JavaScript-在線有大量免費資源! 我認為,只要對語言有一點了解,就可以更輕松地看到代碼的陷阱。
如果您需要更多幫助,在這里給我發消息,請分解這里的任何內容-我們很樂意為您指明正確的方向! 我認為“全局變量不好”這樣的指針不會幫助您解決問題,但是您對JavaScript的廣泛了解將使該程序輕而易舉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.