0

私は以下のコードを持っています。

(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]();

「myInterncalCallFunction」を見つけることができない代わりに、「myFunctionTest」を見つけることができないことを返します。

関数が見つからない理由はありますか?

4

1 に答える 1

1

電話をかけるmyFunction['myInternalCallFunction']()ことで、実際に電話をかけていることになりますmyFunction.myInternalCallFunction()。もちろん、はのmyInternalCallFunctionプロパティではなく、myFunctionそのプライベート変数であるため、未定義です。プライベート変数をプロパティに変えずにこれを解決する1つの方法:

(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);
于 2012-11-08T22:57:33.820 に答える