地球ウォーカー2

Scala, Python の勉強日記

<code>$.extend (jQuery.extend)</code> のよくある使い方

function内の変数の初期化で使う。
次のコードではoptionsに渡しているプロパティのみ上書きされる。

function f(options) {
    var defaults = {
        str1: 'default str1',
        str2 : 'default str2',
        bool : true
    };

    var settings = jQuery.extend({}, defaults, options); // ここで初期化する

    console.dir(settings);
    // 出力は以下の通り
    // bool   false
    // str1   "custom str1"
    // str2   "default str2"
}

f({
    str1 : 'custom str1',
    bool : false
});

ちなみに

$.extend を使わない場合は次のように少し面倒。

function f(options) {
    var defaults = {
        str1: 'default str1',
        str2 : 'default str2',
        bool : true
    };

    // ここで初期化する
    var settings = {
        str1 : options.str1 || defaults.str1,
        str2 : options.str2 || defaults.str2,
        // デフォルトがtrueなので、options.bool || defaults.bool ではうまく動かない
        bool : typeof options.bool !== 'undefined' ? options.bool : defaults.bool
    };

    console.dir(settings);
    // 出力は以下の通り
    // bool   false
    // str1   "custom str1"
    // str2   "default str2"
}

f({
    str1 : 'custom str1',
    bool : false
});