[解決済み] jQuery の extend メソッドに相当する JavaScript の機能
質問
背景
を受け取る関数があります。
config
オブジェクトを引数として受け取る関数があります。 この関数の中で、私はまた
default
オブジェクトがあります。 これらのオブジェクトはそれぞれ、本質的に関数内の残りのコードに対する設定として働くプロパティを含んでいます。 の中ですべての設定を行う必要がないようにするためです。
config
オブジェクトの中ですべての設定を指定する必要がないように、私はjQueryの
extend
メソッドを使用して新しいオブジェクトを記入します。
settings
からのデフォルト値で
default
オブジェクトで指定されていない場合は
config
オブジェクトで指定されていない場合は
var config = {key1: value1};
var default = {key1: default1, key2: default2, key 3: default 3};
var settings = $.extend(default, config);
//resulting properties of settings:
settings = {key1: value1, key2: default2, key 3: default 3};
問題点
この機能は素晴らしいのですが、jQueryを使用せずにこの機能を再現したいです。 これをプレーンな古い javascript で行うための、同じくらいエレガントな (またはそれに近い) 手段はあるでしょうか?
編集: 重複しない正当化
この質問は"と重複していません。 どのように私は2つのJavaScriptオブジェクトのプロパティを動的にマージすることができますか? という質問です。その質問は、単に2つの別々のオブジェクトからすべてのキーと値を含むオブジェクトを作成したいのですが、私は特に、両方のオブジェクトがすべてのキーではなく一部を共有している場合にこれを行う方法と、重複するキーがある場合に結果のオブジェクトに優先(デフォルト)されるオブジェクトを対処したいのです。さらに具体的には、これを実現するためにjQueryのメソッドを使用することと、jQueryを使用せずにこれを実現する代替方法を見つけたいと考えていました。 両方の質問に対する答えの多くは重複していますが、質問自体が同じであることを意味するわけではありません。
どのように解決するのですか?
あなたのコードで結果を得るには、次のようにします。
function extend(a, b){
for(var key in b)
if(b.hasOwnProperty(key))
a[key] = b[key];
return a;
}
ここでextendを使用した方法は、デフォルトのオブジェクトを変更することに留意してください。 もしそうしたくないのであれば
$.extend({}, default, config)
jQueryの機能を模倣した、より堅牢なソリューションは次のようになります。
function extend(){
for(var i=1; i<arguments.length; i++)
for(var key in arguments[i])
if(arguments[i].hasOwnProperty(key))
arguments[0][key] = arguments[i][key];
return arguments[0];
}
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] jQueryのバージョン1、バージョン2、バージョン3の違いは何ですか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] 変異を伴わないオブジェクトからの値の削除
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?