首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >(Javascript)有没有办法为一个变量定义多个属性?

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

Stack Overflow用户
提问于 2019-03-01 03:40:10
回答 1查看 44关注 0票数 -1

我在这里,再一次,在我的基于文本的游戏上寻求帮助。

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

让我来了解一下我的意思。

所以,这给我带来了各种各样的问题,同时也在尝试制作一个可行的装备和购物系统。

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

代码语言:javascript
复制
    var Armor = {
        ClothesName: "",
        HelmetName: "",
        BodyName: "",
        ArmName: "",
        WaistName: "",
        LegName: "",
        BootsName: ""
    }

    var Weapons = {
        SwordName: "",
        RightHand: "",
        ShieldName: "",
        LeftHand: "",
        BowName: "",
        ArrowName: "",
        NumberOfArrows: 0,
        StaffName: ""
    }

然后我将我的装甲设置为这样(这是整体问题的一部分):

代码语言:javascript
复制
    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.
    }

代码语言:javascript
复制
    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.

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

代码语言:javascript
复制
    function equip() {
        if (Warrior == true) {
            Armor.ClothesName = MangledRags;
            document.getElementById("Armor.ClothesName").innerHTML = Armor.ClothesName;
            document.getElementById("hero.Defense").innerHTML = hero.Defense;
    }

它在这里阅读:

代码语言:javascript
复制
    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文本读取:

代码语言:javascript
复制
     <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>

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

我没有在网上找到任何类似的问题,所以这就是为什么我在这里张贴。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-01 04:41:12

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

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

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

代码语言:javascript
复制
Armor.ClothesName = "Mangled Rags"
Armor.Defense = 0.25

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

代码语言:javascript
复制
var MangledRags = {
    ClothesName: "Mangled Rags",
    Defense: 0.25,
    // more properties here...
}

function wearMangledRags() {
    Armor.ClothesName = MangledRags.ClothesName;
    Armor.Defense = MangledRags.Defense;
    // etc.
}

这是糟糕的代码风格。不是用手指摆动的方式,而是因为你会因为大量的复制粘贴、代码重复和潜在的错误而使自己的生活变得更加困难。除了温习JS的基本原理、对象和类型之外,我还建议您阅读primer on classes

您可以将ArmorWeapons视为它们应该是的类型和use subclassing to define instances of those types。您将需要ES6特性才能使用class应用编程接口,但也可以将它们与普通的JavaScript一起使用,尽管这比较棘手,并且需要理解prototypical inheritance

在您的代码中还有一些其他错误,这些错误与误解类型和值之间的区别是相同的(例如,除非Warrior是布尔值,否则Warrior === true将无法工作-您不能以这种方式评估类类型,Armor.ClothesName = MangledRags;将存储在MangledRags变量中的对象赋给Armor变量的ClothesName属性,我认为这不是您想要的)。我真的建议你温习一下基本的JavaScript --网上有很多免费的资源!我认为,随着您对该语言的理解提高一小步,您将能够更容易地看到您的代码的陷阱。

如果你需要更多的帮助,请在这里给我留言--我很乐意为你指明正确的方向!我不认为像“全局变量不好”这样的指针会帮助解决你的问题,但是你对JavaScript理解的广泛收获会让这个程序变得轻而易举。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54933086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档