3

関数に任意の数の引数を渡そうとしています。引数は json 型 [function : arrayOfArgs] である必要があります。キーは関数で、値は引数の配列であり、それらの関数に渡す必要があります。

最初は引数の数だけの関数を考えた

 function _gl(f,args){ f.apply(null,args); }

 function func(a,b){ alert(a+b); }

// 関数の呼び出し

<input type="button" value="test" onclick="_gl(func,['2','3']);"/>

そしてそれはかなりうまく機能します.今、私はその方法を一般化しようとしています

function _GL(){
      var arguments = _GL.arguments; 

      var i=0;
      for(i;i<arguments.length;i++)
      {
        var A=arguments[i];
        for(j in A) j.apply(null,A[j]); 
      } 
   }

//そしてそれを呼び出す

<input type="button" value="TEST" onclick="_GL({func:['2','3']});"/>

しかし、「Uncaught TypeError: Object func has no method 'apply'」というエラーが表示されます。

4

3 に答える 3

1
{func:['2','3']}

"func"value で呼び出される (文字列) キーを持つオブジェクトを作成しています['2','3']。文字列は関数ではないため、.apply().

オブジェクトでは、キーは文字列でなければなりません。他の型をキーとして使用することはできません。


それを「一般化」するには、関数とその引数の配列を渡す必要があります。このようなもの:

[[func, ['2','3']], [func2, ['abc']]

したがって、これを行った場合:

onclick="_GL([[func, ['2','3']], [func2, ['abc']]);"

次に、ループして関数を取得し、それらを呼び出すことができます。

function _GL(funcs){
    for(var i=0, len=funcs.length; i < len; i++){
        var func = funcs[i];
        func[0].apply(null, func[1]);
    }
}
于 2013-09-25T13:48:52.263 に答える