2012-11-08 60 views
0

我有以下代码。使用变量名称在jQuery插件中调用函数

(function($) { 

    var myFunction = function(element) { 

     var myCallerFunction = function() { 
      var functionName = 'myInternalCallFunction'; 
      myFunction[functionName](); 
      console.log(2); 

     } 

     var myInternalCallFunction = function() { 

      console.log(1); 
     } 

     myCallerFunction(); 

    } 

    $.fn.myfunction = function(options) { 
     var func = new myFunction(); 
    } 

})(jQuery); 

在myCallerFunction里面我创建了一个变量来存放我想调用的函数名。然后我尝试调用它,但返回它无法找到该函数。它发现的命名空间myFunction的没关系,如果我改变:

myFunction[functionName](); 

myFunctionTest[functionName](); 

它返回它无法找到的“myFunctionTest”,而不是不能够找到“myInterncalCallFunction”。

任何想法,为什么它无法找到该功能?

+0

您正在定义'myInternalCallFunction'太迟。它根本不存在(并且不是myFunction的属性) –

+3

您不能动态检索本地变量,它们必须是某个objct的属性。而'myInternalCallFunction'不是'myFunction'的btw属性。 – Esailija

+0

现在看看,我修改了它 - 不正确的代码发布之前!我只是调用$()。myfunction()并且在Firebug中出现“TypeError:myFunction [functionName]不是函数” – Ashley

回答

1

通过致电myFunction['myInternalCallFunction']()您实际上调用myFunction.myInternalCallFunction()。当然,因为myInternalCallFunction不是myFunction的属性,所以它是未定义的,它是它的私有变量。解决此问题的一种方法,但不能将私有变量转换为属性:

(function($) { 

    var myFunction = function(element) { 
     var cache = {}; 
     var myCallerFunction = function() { 
      var functionName = 'myInternalCallFunction'; 
      cache[functionName](); 
      console.log(2); 

     } 

     cache.myInternalCallFunction = function() { 

      console.log(1); 
     } 

     myCallerFunction(); 

    } 

    $.fn.myfunction = function(options) { 
     var func = new myFunction(); 
    } 

})(jQuery); 
+0

这很好,谢谢! – Ashley