0

Fabric.jsのソースコードを読んでJavascriptを学ぼうとしています。

ファイルutil/lang_array.jsには、次のようなメソッドがあります。

    var slice = Array.prototype.slice;

    function invoke(array, method) {
        var args = slice.call(arguments, 2), result = [ ];

        for (var i = 0, len = array.length; i < len; i++) {
            result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);
        }
        return result;
    }

私はその声明を理解していませんvar args = slice.call(arguments, 2)。私を困惑させる特定の部分は2、2番目の引数として渡されています(その場合はそうあるべきだと考えていますarguments)。JSリファレンスを調べたところ、基本的にargsを空の配列に初期化するという結論に達しました。[array, method]arguments[2]null

では、なぜ単純ではないのですvar args = []か?

ありがとう。

4

2 に答える 2

2

この行は、関数に提供された追加の引数を取得するためにあります。

これらの追加の引数は、呼び出しで指定されたメソッドに渡され.applyます。

注意:JSは関数の正式なパラメーターをチェックしません。省略されたパラメーターはでありundefined、追加のパラメーターは(ほとんど)無視されますが、arguments疑似配列を介して使用できます。

なぜコードargs.lengthが呼び出すかどうかを確認する.applyのが面倒なのか、それとも.call時期尚早の最適化のように見えるのかわかりません。

于 2012-10-30T14:53:38.800 に答える
0

関数に2つのパラメーターがあるからといって、それ以上のパラメーターを渡せないというわけではありません。Javascriptでは、必要な数のパラメーターを渡して、を介してそれらにアクセスできますarguments

また、これは任意のメソッド(2番目の関数引数)呼び出しで機能することを目的とした汎用のinvoke関数のようです。したがって、関数ごとに引数の数が異なる(または引数がない)可能性があります。

于 2012-10-30T14:54:22.710 に答える