[解決済み] JavaScriptでJSON文字列を特定のオブジェクトプロトタイプにパースする
2022-04-21 18:26:58
質問
JSON文字列をパースして、JavaScriptオブジェクトに変換する方法は知っています。
そのためには
JSON.parse()
をモダンブラウザ(およびIE9+)で表示します。
それはいいのですが、そのJavaScript Objectをどうすれば 特殊 JavaScriptオブジェクト(つまり、特定のプロトタイプを持つ)?
例えば、あるとします。
function Foo()
{
this.a = 3;
this.b = 2;
this.test = function() {return this.a*this.b;};
}
var fooObj = new Foo();
alert(fooObj.test() ); //Prints 6
var fooJSON = JSON.parse({"a":4, "b": 3});
//Something to convert fooJSON into a Foo Object
//....... (this is what I am missing)
alert(fooJSON.test() ); //Prints 12
繰り返しになりますが、私はJSON文字列を一般的なJavaScriptオブジェクトに変換する方法を疑問に思っているわけではありません。 私が知りたいのは、JSON文字列を"Foo"オブジェクトに変換する方法なのです。 つまり、私のオブジェクトは、関数 'test' とプロパティ 'a' および 'b' を持つ必要があります。
アップデイト いろいろ調べた結果、こんなことを思いつきました...。
Object.cast = function cast(rawObj, constructor)
{
var obj = new constructor();
for(var i in rawObj)
obj[i] = rawObj[i];
return obj;
}
var fooJSON = Object.cast({"a":4, "b": 3}, Foo);
うまくいくかな?
UPDATE 2017年5月
: 現代的な方法は、以下の通りです。
Object.assign
しかし、この機能は IE 11 以前の Android ブラウザでは使用できません。
解決するには?
現在の回答には、多くのハンドロールコードやライブラリコードが含まれています。これは必要ありません。
-
使用方法
JSON.parse('{"a":1}')
でプレーンなオブジェクトを作成します。 -
標準化された関数のいずれかを使用して、プロトタイプを設定します。
-
Object.assign(new Foo, { a: 1 })
-
Object.setPrototypeOf({ a: 1 }, Foo.prototype)
-
関連
-
JavaScriptの関数この指摘の問題を説明
-
vueが定義するプライベートフィルタと基本的な使い方
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] JSON文字列を安全にオブジェクトに変換する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】GETできない / Nodejsエラー
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
[解決済み] JSONオブジェクトをTypeScriptのクラスにキャストする方法を教えてください。