Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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_Concatenation - Fatal编程技术网

可以通过在JavaScript中连接两个字符串来调用变量吗?

可以通过在JavaScript中连接两个字符串来调用变量吗?,javascript,variables,concatenation,Javascript,Variables,Concatenation,我试图压缩我的代码,我已经看过很多关于串联变量的文章,但是我还没有得到任何我需要的工作方式 下面是两段代码。它们在功能上完全相同,只是第一个代码段的变量名称中使用了“Str”,而第二个代码段使用了“Dex”。我计划用“Int”和“Ht”创建类似的代码,但我不想复制/粘贴,然后再回去一遍又一遍地更改代码中的“Str、Dex、Int、Ht”名称 是否可以将'Str,Dex,Int,Ht'放入变量[var1](根据按下的按钮)中,然后使用[var1]代替'Str,Dex,Int,Ht',这样代码只需编

我试图压缩我的代码,我已经看过很多关于串联变量的文章,但是我还没有得到任何我需要的工作方式

下面是两段代码。它们在功能上完全相同,只是第一个代码段的变量名称中使用了“Str”,而第二个代码段使用了“Dex”。我计划用“Int”和“Ht”创建类似的代码,但我不想复制/粘贴,然后再回去一遍又一遍地更改代码中的“Str、Dex、Int、Ht”名称

是否可以将'Str,Dex,Int,Ht'放入变量[var1](根据按下的按钮)中,然后使用[var1]代替'Str,Dex,Int,Ht',这样代码只需编写一次

//Define Stength Increase Function
var strIncrease = function () {
//Increase playerStrength by 1
    playerStr = playerStr + 1;
    playerStrDisplay.innerHTML = playerStr;
//Increase strengthCP by 10
    strCP = strCP + strCost;
    strCPDisplay.innerHTML = strCP;
//Decrease totalCP by 10
    totalCP = totalCP - strCost;
    totalCPDisplay.innerHTML = totalCP;
}

//Define Dexterity Increase Function
var dexIncrease = function () {
//Increase playerDexterity by 1
    playerDex = playerDex + 1;
    playerDexDisplay.innerHTML = playerDex;
//Increase DexterityCP by 20
    dexCP = dexCP + dexCost;
    dexCPDisplay.innerHTML = dexCP;
//Decrease totalCP by 20
    totalCP = totalCP - dexCost;
    totalCPDisplay.innerHTML = totalCP;
}

可以将对象用作贴图:

var player = { str: 0, dex: 0, ... };

function increase(stat) {
    player[stat]++;
    document.getElementById(stat + 'Display').innerHTML = player[stat];
}

increate('str');

您可以将属性定义为对象的属性,并使用字符串访问它们,如下所示:

var player = {
    str: 1,
    dex: 1,
    in: 1,
    ht: 1,
    strCP: 10,
    dexCP: 10,
    intCP: 10,
    htCP: 10,
    totalCP: 0
},
costs = {
   strCost: 10,
   dexCost: 10,
   inCost: 10,
   htCost: 10
};

function increaseAttribute(player, costs, attr) {
    player[attr] += 1;
    player[attr + "CP"] += costs[attr + "Cost"];
    player.totalCP += costs[attr + "Cost"];
.
.
}

function increaseStr () {
   increaseAttribute(player, costs, attr);
}
.
.
.

您可以使用
closure
动态生成方法

比如说

var player = { 
   str : 0
   dex : 0
   int : 0
   ht : 0
}

function methodFactory (player, property, diff) {
    var mathod = function () {
        player[property] += diff;
    }
    return method;
}
然后


编写一次,使用everywhere

是:通过一点重构,您应该能够利用对象上的属性可以通过字符串寻址这一事实<代码>变量o={};o、 foo=‘foo’;console.log(o['foo']);/*foo*/}你应该研究学习,尤其是在做游戏的时候。你所说的地图只是一个对象文字。是稍有不同的,并且是ES6提案的一部分。感谢您花时间编写此示例。这对我的编程新手来说是最有意义的。
var addInt = methodFactory (player, 'int', 1);
var addIntBy2 = methodFactory (player, 'int', 2);

addInt();