Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于包含函数名的字符串调用函数_Javascript_Jquery - Fatal编程技术网

Javascript 基于包含函数名的字符串调用函数

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的情况下,有没有更好的方法来实现这一点?除非绝对必要,否则我不太喜欢使用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'