1

当我做一个函数时,我的变量有问题。这只是一个愚蠢的例子。在我的代码中,我有很多要在函数中使用的变量,因此我不必为每个变量“ex1、ex2 等”一遍又一遍地编写函数。下面是我想要做的真的很简单。首先检查“ex1”是否等于声明的值,然后执行操作(实际代码中的动画)。然后对“ex2”等做同样的事情。有没有一种简单的方法可以做到这一点?

<script>
var ex1 = 'frog'; //Those are not set manually. ID's in real code
var ex2 = 'pig';
var ex3 = 'horse';
var ex4 = 'bird';

var x = 0;
setInterval("call", 5000);
function call(){

    x++;

    if(('ex' + x) == 'frog'){
    //action a
    }
    else if(('ex' + x) == 'pig'){
    //action b
    }
    else if(('ex' + x) == 'horse'){
    //action c 
    }
    else if(('ex' + x) == 'bird'){
    //action d
    }

}

</script>
4

2 回答 2

2

全局变量是window对象的属性(无论如何在浏览器中)。您可以使用方括号表示法访问属性,如下所示:

var ex1 = 'frog'; //Those are not set manually. ID's in real code
var ex2 = 'pig';
var ex3 = 'horse';
var ex4 = 'bird';

var x = 0;

function call(){

    x++;

    if(window['ex' + x] === 'frog'){
    //action a
    }
    else if(window['ex' + x] === 'pig'){
    //action b
    }
    else if(window['ex' + x] === 'horse'){
    //action c 
    }
    else if(window['ex' + x] === 'bird'){
    //action d
    }

}

setInterval(call, 5000);

但是,ex在这里制作一个数组可能会更好:

var ex = [];
ex[1] = 'frog'; //Those are not set manually. ID's in real code
ex[2] = 'pig';
ex[3] = 'horse';
ex[4] = 'bird';

var x = 0;

function call(){

    x++;

    if(ex[x] === 'frog'){
    //action a
    }
    else if(ex[x] === 'pig'){
    //action b
    }
    else if(ex[x] === 'horse'){
    //action c 
    }
    else if(ex[x] === 'bird'){
    //action d
    }

}

setInterval(call, 5000);

如果您对很多字符串执行此操作,请使用以下switch语句:

var ex = [];
ex[1] = 'frog'; //Those are not set manually. ID's in real code
ex[2] = 'pig';
ex[3] = 'horse';
ex[4] = 'bird';

var x = 0;

function call(){

    x++;
    switch(ex[x]) {
       case 'frog':
           //action a
           break;
       case 'pig':
           //action b
           break;
       case 'horse':
           //action c
           break;
       case 'bird':
           //action d
           break;
    }

}

setInterval(call, 5000);
于 2013-10-23T08:40:40.407 回答
1

此外,关于 ifs,更优雅的方法是拥有一个包含所有动作的对象,如下所示:

var actions = {
  frog:function(){
  //action a
  },
  pig:function(){
    //action b
  }
}

然后在对象中找到动作并在找到时调用它

var action = actions['ex' + x]
if (action) {
  action();
}
于 2013-10-23T08:43:39.617 回答