[解決済み] JavaScriptです。オブジェクトを値で渡すには?
2023-02-16 02:07:50
質問
-
オブジェクトをパラメータとして渡すとき、JavaScriptは参照で渡すため、オブジェクトのローカルコピーを作成することが困難です。
var o = {}; (function(x){ var obj = x; obj.foo = 'foo'; obj.bar = 'bar'; })(o)
o
を持つことになります。.foo
そして.bar
. -
クローンによって回避することが可能です。簡単な例です。
var o = {}; function Clone(x) { for(p in x) this[p] = (typeof(x[p]) == 'object')? new Clone(x[p]) : x[p]; } (function(x){ var obj = new Clone(x); obj.foo = 'foo'; obj.bar = 'bar'; })(o)
o
を持つことはありません。.foo
または.bar
.
質問
- オブジェクトを値で渡すには、ローカル コピー/クローンを作成する以外に良い方法はありますか。
どのように解決するのですか?
そうでもないです。
実際に必要なものにもよりますが、1つの
可能性
を設定することができます。
o
を新しいオブジェクトのプロトタイプとして設定することができます。
var o = {};
(function(x){
var obj = Object.create( x );
obj.foo = 'foo';
obj.bar = 'bar';
})(o);
alert( o.foo ); // undefined
に追加したプロパティは
obj
には追加されません。
o
. に追加されたプロパティは
obj
のプロパティと同じ名前を持つ
o
はシャドウされます。
o
プロパティになります。
もちろん、どのプロパティも
o
に追加されたプロパティは
obj
を持つすべてのオブジェクトは、影がかかっていなければ
o
を持つすべてのオブジェクトは、プロトタイプチェーン内の
o
.
また、もし
obj
に配列のような別のオブジェクトを参照するプロパティがある場合、 オブジェクトにメンバーを追加する前に必ずそのオブジェクトをシャドウする必要があります。
obj
に追加され、そのオブジェクトは
obj
を持つすべてのオブジェクトで共有されます。
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // 'new_value'
でArrayをシャドウしていないため、このようになります。
baz
にある
o
で
baz
プロパティに
obj
を使用すると
o.baz
配列は修正される。
だからその代わりに、まずシャドウする必要があるんだ。
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz = [];
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // undefined
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] なぜ "use strict "はパフォーマンスを10倍向上させるのか?
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] javascriptでオプションのパラメータを扱う