而使用eval
不是一个好的编程习惯。这个问题是说教性质的,或学习更好的解决方案:使用命名空间的Javascript动态函数调用
见在Javascript下面的例子:
var foo = foo || {};
foo.bar = function(str) { alert(str); };
foo.bar('aaa'); // trigger alert('aaa')
window['foo']['bar']('bbb'); // trigger alert('bbb')
我在寻找一个通用的调用者与foo.bar('str')
,foo.nestedObj.bar(params)
工作,foo.n2.n[1..99].bar(params)
那是因为我不能把这样的:
param = [5,2,0];
call = 'foo.bar';
window[call](param); // not work
但我可以调用USI NG EVAL:
param = [5,2,0];
call = 'foo.bar'
eval(call + '(param)'); // works
我怎样才能做到这一点无eval
?
这几乎每天都被问到。等一下,找那些傻瓜。 –
http://stackoverflow.com/q/14375753/989121 – georg
可能重复[是否邪恶使用eval将字符串转换为函数?](http://stackoverflow.com/questions/14396647/is-it -evil-to-use-eval-to-convert-a-string-to-a-function) –