如何在JavaScript中运行随机选择的函数?

时间:2012-05-21 22:27:09

标签: javascript jquery

我正在尝试运行一个随机函数,但还没有弄明白:

<script>

function randomFrom(array) {return array[Math.floor(Math.random() * array.length)];}

function randomchords(){randomFrom(['poop()', 'poop2()', 'poop3()']);}               



function poop() { $(function() {ionian_c_vi() });  }                          

function poop2() {  $(function() {ionian_c_iii() }), $(function() {ionian_c_iv() });  }                      

function poop3() { $(function() {ionian_c_vi() }), $(function() {ionian_c_i() }), $(function() {ionian_c_ii() });  }  

</script>

然后:

<button onclick="randomchords()" >Get some random chords</button>

我是在正确的轨道上吗?

4 个答案:

答案 0 :(得分:9)

一种选择是使用window对象:

function randomchords() {
    var func = randomFrom(['poop', 'poop2', 'poop3']);
    window[func]();
}

注意你应该从数组中的函数名中删除括号。


另一种选择是从上面的变体中删除引号并直接调用函数:

function randomchords() {
    var func = randomFrom([poop, poop2, poop3]);
    (func)();
}

答案 1 :(得分:6)

功能就像价值观。你可以说:

var myArray = [
    function(){
        ionian_c_vi();
    },
    function(){
        ionian_c_iii();
        ionian_c_iv()
    },
    function(){
        ionian_c_vi();
        ionian_c_i();
    }
];
function randomchords(){ 
     randomFrom(myArray).call();
}

有关详细信息,请查看http://www.yuiblog.com/blog/2010/02/24/video-crockonjs-3/和/或阅读https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call

Bookwise,阅读Javascript:The Good Parts(120页)

帮助在jQuery之外学习JS:)

答案 2 :(得分:1)

你非常接近:

function foo() { ... }
function bar() { ... }
function baz() { ... }

这些函数定义为全局范围,通常在浏览器中为window。 例如,您可以通过调用window['foo']来通过字符串访问它们。这将返回foo函数本身(而不是执行中的值)。

function randomFrom(array) {
  return array[Math.floor(Math.random() * array.length)];
}

function randomchords() {
  // add the 'window' prefix here
  randomFrom(window['foo', 'bar', 'baz'])();
}               

答案 3 :(得分:0)

你可以这么做:

但最简单的我认为生成一个随机数,并用case调用函数:)

$("button").click(function)
{
    var n = Math.floor(Math.random()*11);
    switch(n)
    {
        case: 0:
        Function0();
        break;

        case: 1:
        Function1();
        break;

        case: 2:
        Function2();
        break;

        ...

        case: 10:
        Function10();
        break;
}

使用btn你可以打电话

<button>Get some random chords</button>