(使用Javascript)是否可以为一个变量定义多个属性?

时间:2019-02-28 19:40:10

标签: javascript variables global-variables

我再次在这里,是基于文本的游戏的帮助。

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

让我摘录一下我的意思。

因此,在尝试建立可行的设备和购物系统时,这引起了我各种各样的问题。

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

    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系统的问题创建一个单独的问题。

我没有在网上找到与此问题类似的东西,所以这就是为什么我在这里发布。

1 个答案:

答案 0 :(得分:1)

这里有很多需要解说的地方,我认为您可以通过完成快速的JavaScript教程来解决许多问题,因为我认为很多原理(尤其是周围的类型)正在使您难以理解。

ArmorWeapons都是对象,并使用您在第一个代码段(ClothesNameSwordName等)。除了存储分配给您在代码中定义的键名的值外,它们没有任何作用

我之所以强调这一点,是因为您似乎希望将ArmorWeapons视为类型,特别是允许您将它们子类化为{{1 }}和Armor具有特定的属性,例如Weapon。要直接解决您的问题,您可以像下面这样更改现有MangledRags全局属性:

Armor

您甚至可以定义一个新对象来存储残破的抹布属性,以避免重新键入它们:

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

这是错误的代码样式。不是用费力的方式,而是因为您将因大量复制粘贴,代码重复以及潜在的错误而使自己的生活更加艰难。除了重提基本的JS原则,对象和类型之外,我建议阅读primer on classes

您可以将var MangledRags = { ClothesName: "Mangled Rags", Defense: 0.25, // more properties here... } function wearMangledRags() { Armor.ClothesName = MangledRags.ClothesName; Armor.Defense = MangledRags.Defense; // etc. } Armor视为它们应为的类型和use subclassing to define instances of those types。您将需要ES6功能才能使用Weapons API,但是可以将它们与原始JavaScript一起使用,尽管比较棘手,并且需要了解prototypical inheritance

您的代码中还有其他一些错误,它们都是基于误解类型和值之间的区别而产生的(例如,class除非布尔值Warrior === true才起作用-您无法以这种方式评估类类型,Warrior会将存储在Armor.ClothesName = MangledRags;变量中的对象分配到MangledRags变量的ClothesName属性中,我不认为那是什么你要)。我真的建议您稍微学习一下基本的JavaScript-在线有大量免费资源!我认为,只要对语言有一点了解,就可以更轻松地看到代码的陷阱。

如果您需要更多帮助,请随时在这里给我发消息,以帮助您解决这里的所有问题-我们很乐意为您指明正确的方向!我认为“全局变量不好”这样的指针不会帮助您解决问题,但是您对JavaScript的广泛了解将使该程序轻而易举。