在JavaScript中动态更改方法名称

时间:2016-04-14 08:21:25

标签: javascript

我有以下代码:

headerCaptions.push(localization.SCREEN_EPISODE_INITIATION_HEADER_REQUEST1);
headerCaptions.push(localization.SCREEN_EPISODE_INITIATION_HEADER_REQUEST2);
headerCaptions.push(localization.SCREEN_EPISODE_INITIATION_HEADER_REQUEST3);

headerCaptions是一个数组。 localization对象包含字符串值。

我想动态地生成它,即映射x次,每次迭代时对象参数的数量增加1。例如,make 4会使最终方法调用SCREEN_EPISODE_INITIATION_HEADER_REQUEST4,依此类推。

我很高兴使用vanilla js或新的ES6语法。

5 个答案:

答案 0 :(得分:2)

您可以在对象中使用括号表示法来使用这样的变量:

headerCaptions.push(localization['SCREEN_EPISODE_INITIATION_HEADER_REQUEST'+i]);

然后你可以使用循环:

for(var i = 0; i < 3; i++) {
    headerCaptions.push(localization['SCREEN_EPISODE_INITIATION_HEADER_REQUEST'+i]);
}

答案 1 :(得分:1)

使用ES6语法,你可以这样调用:

const n = 4;
for (let i = 0; i < n; i++) {
  headerCaptions.push(localization[`SCREEN_EPISODE_INITIATION_HEADER_REQUEST${i}`])
}

由于可以通过调用object.propertyobject['property']来访问JavaScript对象属性,因此我们可以通过操作字符串以编程方式访问感兴趣的location属性。

``语法使用字符串插值,允许您通过${}

将计算值/变量插入字符串中

答案 2 :(得分:1)

在JavaScript中,您可以使用点语法(在示例中使用)或子串语法访问对象属性,如下所示:

headerCaptions.push(localization["SCREEN_EPISODE_INITIATION_HEADER_REQUEST1"]);

由于方括号只包含一个字符串,因此可以动态生成它们。

headerCaptions.push(localization["SCREEN_EPISODE_INITIATION_HEADER_REQUEST" + i]);

现在你需要做的就是循环你的数字。

var i = 1;
var il = 4;
while (i < il) {

    headerCaptions.push(localization["SCREEN_EPISODE_INITIATION_HEADER_REQUEST" + i]);
    i += 1;

}

答案 3 :(得分:0)

for(var i=0; i<5; i++){

    if(!localization.hasOwnProperty("SCREEN_EPISODE_INITIATION_HEADER_REQUEST"+i))
       break;

    headerCaptions.push(localization["SCREEN_EPISODE_INITIATION_HEADER_REQUEST"+i);

}

答案 4 :(得分:0)

语法a.b相当于a['b'],因此您可以执行

for(var i = 1; i <= n; i++) {
  headerCaptions.push(localization['SCREEN_EPISODE_INITIATION_HEADER_REQUEST' + i]);
}

但是,将这些值存储在数组中可能会更好。