JavaScript - 包含函数名称的字符串

时间:2013-03-28 11:03:09

标签: javascript

通常情况下,如果我有一个包含函数名称的字符串,我可以做类似的事情......

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(),但我正试图避免......

感谢。

1 个答案:

答案 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);
            }
        }
    };