2

特定の引数を並べ替えたり省略したりできる jQuery メソッドのヒープがあります。例えば:

$('#box').animate({top: 100}, 2000, "linear", function(){alert("done");});

以下とまったく同じように機能します。

$('#box').animate({top: 100}, 2000, function(){alert("done");});

連想配列を単一の引数に渡すことなく、この柔軟性を可能にするために、jQuery はどのようにメソッドを構成しますか?

彼らは各引数のデータ型をチェックし、結果に基づいて割り当てますか? これにより、各メソッドにかなりのオーバーヘッドが追加されますか?

4

4 に答える 4

0

確かに jQuery の使用if,elseおよびswitchステートメント, すべての引数を最初にチェックする必要があります. 関数, ブール値, 文字列, 整数またはオブジェクト値です

実行する前に。

于 2012-12-20T01:17:23.280 に答える
0

スイッチを使用して独自のソリューションをエミュレートしました。

// Allocate passed arguments to settings based on type
for( var i = 0; i <= arguments.length; i++ ) {
    var arg = arguments[i];
    switch ( typeof arg ) {
        case "function":
            settings.action = arg;
            break;
        case "boolean":
            settings.runOnLoad = arg;
            break;
        case "number":
            settings.duration = arg;
            break;
    }
}
于 2012-12-26T23:04:12.700 に答える
0

githubのjQuery.animate() 関数を見ると、2 番目、3 番目、4 番目のパラメーターで jQuery.speed() を呼び出していることがわかります。速度関数はもう少し下に定義されており、パラメーターでいくつかの型チェックを行います。

Effects.js のコード スニペット:

jQuery.speed = function( speed, easing, fn ) {
    var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
        complete: fn || !fn && easing ||
            jQuery.isFunction( speed ) && speed,
        duration: speed,
        easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
    };
    ...
};
于 2012-12-20T01:12:31.493 に答える
0

簡単な答え: はい、通常、 if $.isFunction$.isObject $.isArrayなどをテストし、その型に基づいて引数を移動します。これは、予想されるプロトタイプの定義済みリストがある場合にのみ機能します。(animate の場合、2 番目の引数はオブジェクト (オプション) または数値 (期間) です。

于 2012-12-20T01:14:39.407 に答える