4

jQuery を使用して JavaScript オブジェクトを拡張するときに、小さな問題に遭遇しました。実行時

var item = $.extend(options.itemDefaults, item);

options.itemDefaultsは既に存在するプロパティで拡張されitem、結果は に渡されitemます。ここまでは順調ですね。

しかし、次にこの行が実行されると、元のデフォルトではなく、持っていたoptions.itemDefaultsすべてのプロパティ値が保持されます。itemデフォルトが失われました。

デフォルト オブジェクトを一時変数に単純に格納し、代わりに一時変数を拡張できることはわかっていますが、少し長く見えます。その回り道をせずに、私が求めていることを行う方法はありますか (提供された値でデフォルト値をオーバーライドし、値が提供されていない場合はデフォルトを使用しますが、デフォルト オブジェクトは変更しません)。

更新:これは、私が望んでいたほど簡単には回避できなかったようです。私がする時

var defaults = options.itemDefaults;
var $item = $.extend(defaults, { attributeModel: options.attributeModel }, item);
defaults = undefined 

各反復で、私はまだitem上からプロパティを追加していoptions.itemDefaultsます! どうすればこれを回避できますか?

4

1 に答える 1

11

試す、

var item = $.extend(true, {}, options.itemDefaults, item);

trueフラグは、ディープ コピーを作成する必要があることを示します。

{}デフォルトが改ざんされないように、空のオブジェクトをターゲットとして使用します。

options.itemDefaults、およびのプロパティは、item空のオブジェクトにコピーされます。

于 2010-07-26T08:07:54.973 に答える