JavaScript での型付きインスタンスへの汎用オブジェクトのキャスト
問題ステートメント:
からの JSON 応答サーバーには、クラス インスタンスを表すプレーン オブジェクトが含まれることがよくあります。これらの汎用オブジェクトを型付きインスタンスにキャストすると、そのクラス メソッドを利用して型付きデータにアクセスできるようになります。
解決策:
オブジェクト インスタンスを作成するには、コンストラクターを呼び出す必要があります。ただし、JSON データにはコンストラクター情報が欠如しているため、別のアプローチが必要です。
1.反復クローン作成:
このアプローチには、プレーン オブジェクトのプロパティを新しく作成されたインスタンスにクローン作成することが含まれます:
<code class="javascript">var personLiteral = ...; // JSON.parse("..."); var personInstance = new Person(); for (var prop in personLiteral) personInstance[prop] = personLiteral[prop];</code>
2。 Object.assign の使用:
Object.assign を使用すると、同じタスクをより簡潔に実行できます:
<code class="javascript">var personInstance = Object.assign(new Person(), personLiteral);</code>
ネストされた構造を持つより複雑なオブジェクトの場合は、プロパティと同じクローン作成プロセスを再帰的に適用します。
3.カスタム コンストラクターのクローン作成:
すべてのコンストラクターは、プレーン オブジェクトを受け入れてクローンを作成し、必要なロジックを処理するように拡張できます:
<code class="javascript">Person.fromJSON = function(obj) { // custom code, as appropriate for Person instances // might invoke `new Person` return …; };</code>
例:
特定のシナリオでは、クローン作成プロセスを人物オブジェクトと動物オブジェクトの両方に適用します。
<code class="javascript">var persons = JSON.parse(serverResponse); for (var i=0; i<persons.length; i++) { persons[i] = $.extend(new Person, persons[i]); for (var j=0; j<persons[i].animals; j++) { persons[i].animals[j] = $.extend(new Animal, persons[i].animals[j]); } }</code>
実行メソッドは個々のインスタンスではなく、Animal プロトタイプに追加する必要があることに注意してください。
以上がJavaScript でジェネリック オブジェクトを型指定されたインスタンスにキャストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。