Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Javascript)有没有办法为一个变量定义多个属性?_Javascript_Variables_Global Variables - Fatal编程技术网

(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> &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>


名称: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.
}