【发布时间】:2015-06-19 14:52:47
【问题描述】:
我有一组定义好的 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);
【问题讨论】:
-
`window[effect]();`你指的是哪个窗口?
-
在试图解决这个问题时,我看到有人建议将字符串作为函数运行,但我认为它不起作用,因为它在函数内。
-
您的函数不在此处的窗口对象中。所以你可以这样做 window[func1] = function (){}; window.func1 = 函数 (){};将它们添加到窗口对象并尝试?
标签: javascript jquery arrays string function