1. ホーム
  2. javascript

[解決済み] 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 ブラウザでは使用できません。

解決するには?

現在の回答には、多くのハンドロールコードやライブラリコードが含まれています。これは必要ありません。

  1. 使用方法 JSON.parse('{"a":1}') でプレーンなオブジェクトを作成します。

  2. 標準化された関数のいずれかを使用して、プロトタイプを設定します。

    • Object.assign(new Foo, { a: 1 })
    • Object.setPrototypeOf({ a: 1 }, Foo.prototype)