Javascript 基于包含函数名的字符串调用函数
在不使用eval的情况下,有没有更好的方法来实现这一点?除非绝对必要,否则我不太喜欢使用eval。您不需要使用Javascript 基于包含函数名的字符串调用函数,javascript,jquery,Javascript,Jquery,在不使用eval的情况下,有没有更好的方法来实现这一点?除非绝对必要,否则我不太喜欢使用eval。您不需要使用eval,只需使用括号符号即可: var foo1,foo2; switch (fn) { case "fade" : foo1 = "fadeOut"; foo2 = "fadeIn"; break; case "slide" : foo1 = "slideUp"; foo2 = "slideDown"; break; } eval
eval
,只需使用括号符号即可:
var foo1,foo2;
switch (fn)
{
case "fade" : foo1 = "fadeOut"; foo2 = "fadeIn"; break;
case "slide" : foo1 = "slideUp"; foo2 = "slideDown"; break;
}
eval("$('.cls1')." + foo1 + "();");
currentSlideIndex = currentSlideIndex + n;
eval("$('.cls1')." + foo2 + "();");
由于存储在
foo1
和foo2
中的函数名是$('.cls1')
返回的对象的属性,因此以下操作应该有效:
$('.cls1')[foo1]();
与
foo2
相同,您可以使用以下语法:
$('.cls1')[foo1]();
然而,动态调用该方法的另一种方法是创建一个新的方法,即deligates
$('selector')[foo1]();
这将允许您快速控制发生的事情,而不是将任何内容作为foo1传递。您可以使用此策略来满足您的需要:
(function() {
$.fn.someFunc = function(what)
{
switch(what) {
case 'fadeOut':
$(this).fadeOut();
break;
// etc
default:
// handle an unknown value
}
}
})(jQuery);
$('.cls1').someFunc('fadeOut');
(function() {
$.fn.someFunc = function(what)
{
switch(what) {
case 'fadeOut':
$(this).fadeOut();
break;
// etc
default:
// handle an unknown value
}
}
})(jQuery);
$('.cls1').someFunc('fadeOut');
function doFade() {
alert('fade');
}
function doFadeIn() {
alert('fadeIn');
}
var fns = {
'fade': doFade
, 'fadeIn', doFadeIn
};
function callSomething(what) {
fns[what]();
}
// callSomething('fadeIn'); => alerts 'fadeIn'