javascript - 选择函数的子集作为字符串并评估

标签 javascript jquery arrays string function

我有一组定义的 JS 函数。我希望用户使用逗号分隔的字符串来选择其中的子集。然后我想从它们的子集中随机选择,并评估所选的函数。我已经完成了 99% 的工作,只是由于某种原因没有进行评估。为什么控制台一直告诉我“未定义不是函数”?

看一下第 37 行:http://jsfiddle.net/ftaq8q4m/

// 1 User picks a subset of function names as a comma seperated string.
var effectSubset = 'func4, func5, func6';


// 2 Available functions
    function func1() {
        $('html').append('func1');
    }

    function func2() {
        $('html').append('func2');
    }

    function func3() {
        $('html').append('func3');
    }

    function func4() {
        $('html').append('func4');
    }

    function func5() {
        $('html').append('func3');
    }

    function func6() {
        $('html').append('func4');
    }


var autoPlay = function () {
    // 3 Get the user's subset of functions, turn into array
    effectArray = effectSubset.split(',');
    // 4 Pick random function from array
    var effect = effectArray[Math.floor(Math.random() * effectArray.length)];
    // 5 run the randomly picked function
    window[effect]();
}

// 6 Re-run every second
var playInterval = setInterval(autoPlay, 1000);

最佳答案

我发现有两处错误:

  1. 您的功能未分配给窗口
  2. 您的“effect”变量包含前导空格

我在这里更正了以上几点:http://jsfiddle.net/ftaq8q4m/1/

这似乎已经解决了您所描述的问题。

示例:

window.func1 = function() {
    $('html').append('func1');
}

还有:

window[effect.trim()]();
<小时/>

更新

作为奖励,我修复了您的误导性附加消息 =D

http://jsfiddle.net/ftaq8q4m/5/

关于javascript - 选择函数的子集作为字符串并评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30941209/

相关文章:

javascript - javascript 和类似的脚本语言会从强类型中受益吗?

javascript - 直接到 S3 文件上传 Django 和 Heroku

javascript - Cheerio 将标签值 <h1> 替换为 <h2> 并保留 insideText

javascript - 如何通过类内部的类名调用元素并使用它

javascript - 使用 Jquery 检查 MVC 模型属性是否为 null

javascript - 将嵌套集合属性拉入数组

javascript - 需要帮助使字符串输入返回一个统计字母对频率的直方图

javascript - 如何找到 x 个属性匹配但其他属性不同的文档

javascript - 即使条件满足后,while 循环也不会停止

arrays - 线程 1 : EXE_BAD_INSTRUCTION | assigning an array of objects values