JavaScript-通过字符串调用函数

JavaScript-通过字符串调用函数,javascript,Javascript,这个问题已经以不同的方式存在,但是我的代码大部分是不同的,所以我不能从其他答案中得到解决方案。这是一个示例代码: http://jsfiddle.net/e52n28xs/ 我想像这样启动函数: var test1 = { start: function() { } }; var fn = 'test1'; fn.start(); 我知道下面的方法有效,但我需要字符串选项 test1.start(); 也许这是不可能的?根据运行此函数的函数中的this的值,这两个选项中的任何一个都

这个问题已经以不同的方式存在,但是我的代码大部分是不同的,所以我不能从其他答案中得到解决方案。这是一个示例代码:

http://jsfiddle.net/e52n28xs/
我想像这样启动函数:

var test1 = {
    start: function() { }
};
var fn = 'test1';
fn.start();
我知道下面的方法有效,但我需要字符串选项

test1.start();

也许这是不可能的?

根据运行此函数的函数中的
this
的值,这两个选项中的任何一个都可以工作:

window['test1'].start();

显然,您可以对函数名本身执行相同的操作,例如:

test1['start']();

如果您希望整个内容都是字符串,那么:

eval('test1.start()');

如果您使用的是
var
,在以前的字符串版本中,您必须查询一个容器对象。

您可以使用
eval()
函数进行查询

var test1 = {
    start: function() { }
};
var fn = 'test1';
eval(fn).start()

如果
test1
在全局范围内,则可以执行
window[fn]()
。为什么要执行此操作?如果您计划使用一个序列
test1..n
,请改用数组。另请参阅。而且而且另外,使用eval:
(新函数(fn+'.start'))()
你能把
test1
包装在一个上下文中吗,例如
var ctx={test1:{start:function(){}
?那么它应该是
ctx['test1'].start();
。要使用它,你应该
this.test1=…;
,而不是
var test1=…;
我应该使用
test['start'](代码)吗
而不是
test.start()
?您是否建议通过调用
窗口['alert'](“Hi”)
来发出警报?我不建议大多数时候都这样做,除非函数名是保留字,并且您需要支持IE8,或者出于某种原因,函数名本身是动态的(您可以在其中放入任何字符串变量,而不仅仅是静态字符串)。我只是想,如果OP希望对象是字符串,他可能也希望函数。@torazaburo,如果您在字符串参数中有函数名,例如,如果是,则有两个选项:或者
eval('test1')。start()
,或者您需要有一些容器,其中包含所有对象,如
var stuff={test1:test1,tree52:tree52};
,然后您可以使用
stuff['test1'].start()之类的内容
。答案中解释了这两个选项。为什么要投否决票???解释!如果答案是
eval
,你就不明白这个问题。P.S.不是被否决的选民。P.P.S.我知道有些地方
eval
是唯一的选项,但这不应该是其中之一。不是我,而是
eval是邪恶的,我们永远都不喜欢它:)这个答案显而易见,大家都知道:)
eval('test1.start()');
var test1 = {
    start: function() { }
};
var fn = 'test1';
eval(fn).start()