簡體   English   中英

(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> &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等)中ClothesName定義的屬性實例化。 除了存儲分配給您在代碼中定義的鍵名的值外,它們什么也不做。

我強調這一點是因為似乎您希望將ArmorWeapons視為類型 ,特別是允許您將它們子類化為具有特定屬性的ArmorWeapon實例的類,例如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入門文章

您可以將ArmorWeapons視為它們應為的類型,並使用子類定義這些類型的實例 您將需要ES6功能來使用class API,但是可以將它們與原始 JavaScript一起使用,盡管比較棘手,並且需要了解原型繼承

您的代碼中還有其他一些錯誤,它們都是基於誤解類型和值之間的區別而發生的(例如Warrior === true除非Warrior是布爾值,否則將不起作用-您無法通過這種方式評估類類型, Armor.ClothesName = MangledRags;被分配存儲在對象MangledRags可變進ClothesName的財產Armor變量,我不認為這是你想要的)。 我真的建議您稍微學習一下基本的JavaScript-在線有大量免費資源! 我認為,只要對語言有一點了解,就可以更輕松地看到代碼的陷阱。

如果您需要更多幫助,在這里給我發消息,請分解這里的任何內容-我們很樂意為您指明正確的方向! 我認為“全局變量不好”這樣的指針不會幫助您解決問題,但是您對JavaScript的廣泛了解將使該程序輕而易舉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM