2012-11-08 86 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