使用点表示法中的objectstring调用javascript函数

Han*_*ans 9 javascript string function object

假设我有字符串:

var string = "function";
Run Code Online (Sandbox Code Playgroud)

window[string];
Run Code Online (Sandbox Code Playgroud)

我可以调用一个名为"function"的函数.

但是,当我有:

var string2 = "function.method.weHaveTogoDeeper";
Run Code Online (Sandbox Code Playgroud)

它应该打电话

window["function"]["method"]["weHaveTogoDeeper"]
Run Code Online (Sandbox Code Playgroud)

我做不到:

window[string2]
Run Code Online (Sandbox Code Playgroud)

在这种情况下.我不知道"."的数量.在字符串中,所以我需要一些常规.

Ken*_*nde 9

您可以.使用以下String.split方法拆分字符串:

var string2 = "function.method.weHaveTogoDeeper";
var methods = string2.split(".");
Run Code Online (Sandbox Code Playgroud)

在这个例子中,methods将是数组["function","method","weHaveTogoDeeper"].您现在应该可以对此数组执行简单的迭代,在前一个数组的结果上调用每个函数.

编辑

我想到的迭代是这样的:

var result = window;
for(var i in methods) {
    result = result[methods[i]];
}
Run Code Online (Sandbox Code Playgroud)

在您的示例中,result现在应该保持相同的输出

window["function"]["method"]["weHaveTogoDeeper"]
Run Code Online (Sandbox Code Playgroud)


nin*_*cko 6

function index(x,i) {return x[i]}
string2.split('.').reduce(index, window);
Run Code Online (Sandbox Code Playgroud)

编辑:当然,如果你从他们名字的字符串调用函数,你可能会做一些不优雅的东西,这将是不受欢迎的,特别是在协作编码设置中.我能想到的唯一用例就是编写一个测试框架,尽管可能还有一些案例.因此,请在关注此答案时谨慎使用; 一个应该使用数组,或理想的直接引用.