使用变量名称在jQuery插件中调用函数

时间:2012-11-08 20:34:27

标签: 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”。

为什么它找不到这个功能?

1 个答案:

答案 0 :(得分: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);