3

「混合」変数を受け入れる関数のベスト プラクティスとテクニックを調べようとしています。これは、jQuery オブジェクトが文字列、オブジェクト、および HTML 要素を受け取り、何をすべきかをインテリジェントに判断する方法に似ています。

しかし、このパターンが何と呼ばれているかはわかりません。知識のある JavaScript 開発者は、この手法をどのように参照するでしょうか?

例えば:

function formatParams(mixed) {
    var params = {};
    switch (typeof mixed) {
        case 'string' :
            params = {query: mixed};
            break;
        case 'number' :
            params = {id: mixed};
            break;
        case 'function' :
            params = {callback: mixed}
            break;
        default: 
            params = mixed;
    }
    return params;
}
4

1 に答える 1

1

このパターンに名前があるかどうかはわかりませんが、「ポリモーフィック パラメーターによる準オーバーロード」が 1 つの方法であると思います。これは真のポリモーフィズムやオーバーロードではなく (したがって、修飾子は "準" です)、JavaScript が動的型付けを行うことの結果です。

ここではおそらく「主観的な」領域に入りますが、私は通常、「混合」パラメータのファンではありません。これは、パラメータを処理するときにあいまいさと論理爆弾の可能性につながるためswitch-caseですif-elseパラメータのさまざまな組み合わせを処理しようとします)。

私は、オブジェクト リテラルを介して名前付きパラメーター (または少なくとも JavaScript が許可するフレーバー) を使用することを好みます。

formatParams({
    stringParam: "string",
    numberParam: 42,
    booleanParam: true,
    functionParam: function() {
        ..
    }
});

次に、実際の関数内で、個々のパラメーターの存在を確認し、それが正しい型であることを確認できます。

function formatParams(options) {
    if(typeof options.stringParam !== "undefined" && typeof options.stringParam === "string") {
        //do what it is you want
    } else {
        throw "stringParam is expected to be of type 'string'.";
    }

    //and so on...
}

この形式のパラメーター処理はエラーが発生しにくく、型チェックを実行しやすく、必要なすべてのパラメーターが提供されているかどうかを確認するのも簡単です。

于 2013-07-11T20:32:18.297 に答える