按名称调用javascript函数,该函数是对象的成员

Jam*_*rgy 4 javascript

我希望能够通过名称将对任意函数的引用传递给另一个javascript函数.如果它只是一个全局函数,则没有问题:

function runFunction(funcName) {
   window[funcName]();
}
Run Code Online (Sandbox Code Playgroud)

但是假设函数可以是任意对象的成员,例如:

object.property.somefunction = function() {
 //
}
Run Code Online (Sandbox Code Playgroud)

runFunction("object.property.somefunction")不起作用.我知道我可以这样做:

window["object"]["property"]["somefunction"]()

因此,虽然可以编写代码来解析字符串并以这种方式找出heirarchy,这似乎工作:)所以我想知道是否有更好的方法来解决这个问题,除了使用 eval()

SLa*_*aks 7

您可以调用funcName.split('.')并遍历生成的数组,如下所示:

function runFunction(funcName) {
    var parts = funcName.split('.');
    var obj = window;

    for (var i = 0; i < parts.length; i++)
        obj = obj[parts[i]];

    return obj();
}
Run Code Online (Sandbox Code Playgroud)