2

したがって、次の疑似 Javascript コードがあります。

var Class = (function(window, document, $) {
    function meth_1()
    {
        //some code
    }

    function meth_2()
    {
        //some code
    }

    function meth_3()
    {
        //some code
    }

    function meth_4()
    {
        //some code to call other three functions dynamically
    }

    Class = {
        meth_1: meth_1,
        meth_2: meth_2,
        meth_3: meth_3,
        meth_4: meth_4
    };
    return Class;

})(window, document, jQuery);

関数ではmeth_4、関数名を文字列として渡すことで、他の 3 つの関数を動的に呼び出したいと考えています。これどうやってするの?!

この関連する StackOverflow の質問では、答えはウィンドウ スコープでこれを行う方法の解決策を提供しますwindow[function_name]()。ただし、特定の状況でそれを行う方法を知りたいです。

ありがとう。

編集

私が選択した答えはうまくいきます。次のこともできます。

var Class = (function(window, document, $) {
    var meth_func = {
        meth_1: function(){/**your code**/},
        meth_2: function(){/**your code**/},
        meth_3: function(){/**your code**/}            
    }

    function meth_4(func_name)
    {
        meth_func[func_name]();
    }

    Class = {
        meth_4: meth_4
    };
    return Class;

})(window, document, jQuery);

動的に呼び出される 3 つの関数を非公開にしたい場合は、おそらくこれでうまくいくでしょう。

4

3 に答える 3

0

なぜそれが必要なのかわかりませんが(「クラス」も変数名としては適していません)、次のようにすることができます:

var Class = (function (window /*, ... */) {
  return {
    func1: function () {console.log('1')}
  , func2: function () {console.log('2')}
  , func3: function () {console.log('3')}
  , func4: function (funcName) {
      console.log('4+')
      this[funcName]()
    }
  }
})(window)

Class.func4('func3')
于 2013-03-04T13:51:29.703 に答える
0

これは、あなたが望むことを行うことができる実装です。文字列を渡すと、適切な関数が検索されて実行されます。ただし、JS の関数は実際にはオブジェクトであるため、それらを渡すことができ、要求されたものと比較して機能を少し拡張したことを示すことができます。関数(実際には文字列以外のもの)を渡すと、それを呼び出す(しようとする)

meth_4 = function(fun){
   if(typeof fun === 'string'){
       this[fun](args.slice(1));
   } else { //assuming it's a function
       if(arguments.length == 1)
          fun.call(this,[])
       } else {
          fun.apply(this,arguments.slice(1))  
       }
   }
}

JavaScript オブジェクトは、キーと値のペアのコレクションであるか、またはそのように扱うことができます。関数またはプロパティは、意味的に同等な 2 つの方法でアクセスできます。

obj.keyまたはobj["key"]、場合によっては後者のみを使用できます。たとえば、プロパティが呼び出された場合、property name実行できませんobj.property nameが実行できますobj["property name"]

于 2013-03-04T13:51:55.490 に答える