0

私はjavascriptで次の関数を書いています:

Number.prototype.niceFormat(options) {
    var defaultOptions = {
        thousandSeparator: ',',
        leftPad: 0,
        decimalPlaces: 2
    };
    if (typeof options.thousandSeparator != 'undefined'
    && options.thousandSeparator != null) {
        defaultOptions.thousandSeparator = options.thousandSeparator;
    }

}

厄介なのは、オプションを完全に柔軟にしたいということです。

を呼び出すとniceFormat({decimalPlaces: 3})、それに応じてdefaultOptionsプロパティdecimalPlacesが置き換えられます。

にあるプロパティの数だけif文を書くのは嫌defaultOptionsです。

のプロパティの値を柔軟に上書きする良い方法はありますdefaultOptionsか?

array_merge基本的に、JavaScriptで for オブジェクトのようなものを探しています。

アップデート:

カンタス航空とクレヨンとポールのコメントから回答を得て、次のように書きました。

Number.prototype.niceFormat = function(options) {
    var defaultOptions = {
        thousandSeparator: ',',
        leftPad: 0,
        decimalPlaces: 2
    };

    var env = defaultOptions;
    if (typeof options != 'undefined') {
        for (option in env) {
            if (options.hasOwnProperty(option)
            && typeof options[option] != 'undefined') {
                    env[option] = options[option];
            }
        }
    }

とにかくこれをさらに改善するには?

4

2 に答える 2

1

あなたがする必要があるのは、両方にそのプロパティが含まれていることを確認してから、それに割り当てることです:

for (var i in options) if (options.hasOwnProperty(i) && defaultOptions.hasOwnProperty(i)) defaultOptions[i] = options[i];

hasOwnProperty()プロパティが(プロトタイプなどを介さずに)そのオブジェクトに直接存在し、実際にオブジェクトに存在することを確認します。

于 2013-08-24T14:47:58.433 に答える