通常情况下,如果我有一个包含函数名称的字符串,我可以做类似的事情......
window[functionName](arguments);
然而,当使用“jQuery对象”样式编程(或任何正确的术语)时,这不起作用。例如;
(function ($) {
"use strict";
$.test = (function () {
var func1 = function () {
alert("func1");
};
var func2 = function () {
alert("func2");
};
return {
Test: function (functionName) {
var fn = window[functionName]; // Need to specify scope here, somehow
if (typeof fn === 'function') {
fn();
} else {
alert("fn() = " + fn);
}
}
}
} ());
} (jQuery));
$.test.Test("func1");
$.test.Test("func2");
理想情况下,这会显示func1后跟func2 - 但显然范围是错误的,我不知道在这种情况下如何指出它。
在这种情况下,如何指定我要调用的函数的范围?我当然可以使用eval(),但我正试图避免......
感谢。
答案 0 :(得分:4)
使用对象图来代替函数:
var funcs = {
func1: function () {
alert("func1");
},
func2: function () {
alert("func2");
}
};
return {
Test: function (functionName) {
var fn = funcs[functionName];
if (typeof fn === 'function') {
fn();
} else {
alert("fn() = " + fn);
}
}
};