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()