JavaScript将函数参数与exciting变量相结合



我正在创建一段对多个变量重复的代码,我想知道是否可以更容易地为它创建一个函数,并在函数中"动态"调整我需要更改的变量。

示例:我正在创建31扇打开或关闭的门。所以我有:

var door1State = 0;
var door2State = 0;
...
var door31State = 0;

我的问题是,是否可以创建一个函数,将门牌号作为参数传递,如下所示:

function openDoor(doorNumber) {
door+doorNumber+State = 1;
}

因此,当我把监听器绑定到门上时,我不必每次都编写匿名函数。

我希望我的解释是清楚的,如果不是,我很乐意再澄清一点。

提前感谢!

编辑:感谢所有有用的回复,我有关于这个问题的下一个问题。我正在使用"Blippar",他们有一个API,工作相当简单,但现在我需要动画门打开。首先,我已经在"场景"中声明了"精灵",接下来我需要对的特定部分进行动画处理

deur1.onTouchEnd = function() {
if (door1Openable == 1) {
deur1.animate().rotationY(180).scale(600,360).translation(0,0,95).duration(1000);
deur1text.animate().rotationY(0).scale(600,360).translation(0,0,100).duration(1000);
setTimeout(function(){
door1State = 1;
}, 1500);
} else {
return false;
}

对于31个门,这种情况发生了31次。我的问题是,如何最容易地将其转换为带参数的函数?唯一需要的参数是"门编号"、"x位置"one_answers"y位置"。

我试过这样的方法,但显然没有奏效,但我很难找到正确的方法

function() openDoor(doorNumber,xPos,yPos) {
if ('door'+doorNumber+'Openable' == 1) {
'deur'+doorNumber.animate().rotationY(180).scale(600,360).translation(xPos,yPos,95).duration(1000);
'deur'+doorNumber+'text'.animate().rotationY(0).scale(600,360).translation(xPos,yPos,100).duration(1000);
setTimeout(function(){
'door'+doorNumber+'Openable' = 1;
}, 1500);
} else {
return false;
}

同样,希望它足够清楚,我基本上是试图通过使用参数来动态地使用函数中的变量。

第2版:API由于某些原因不接受window[],它在应用程序中运行。

尝试使用一个保存状态的数组

const Doors=[
{
id:1,
isOpen:true,
},
{
id:2,
isOpen:true,
},
{
id:3,
isOpen:false,
}
//..etc
]

这比大量的变量更容易处理和操作。

要打开门,你可以这样做:

const OpenDoor=(doorNumber)=>{
Doors.forEach(function(door, index) {
if(door.id===doorNumber)
Doors[index].isOpen = true;  
});
}

然后CCD_ 1

如果将door#State变量更改为单个对象而不是31个单独的变量,则有可能。然后,您可以使用括号符号来查找正确的对象

const doorStates = { door1State: 0, door2State: 0, ... };
function openDoor(doorNumber) {
doorStates['door' + doorNumber + 'state'] = 1;
}

或者,您可以考虑使用数组:

// Create an array of length 31, all elements are 0:
const doorStates = Array.from({ length: 31 }, () => 0);
function openDoor(doorNumber) {
// arrays are zero-indexed
doorStates[doorNumber - 1] = 1;
}

您可以尝试制作一个门的字典。看起来你的用法可能值得使用字典而不是多个变量。这里有一个例子:

list_dict = {};
function(doorname)
{
this.list_dict[doorname] = 0;
}   

你可能还想阅读一些关于地图的内容,在这里:Javascript maps

是的,这是可能的。

function openDoor(number) {
window['door'+number+'State'] = 1;
}
for (var i = 1; i <= 31; i++) {
window['door'+i+'State'] = 0;
}
openDoor(2)
console.log(door2State)

你也可以使用一个数组:

var doors = [
0,0,0,0,0,0,...0 // to 31 0s
];

然后参考door1使用door[0]的状态

最新更新