在 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>
示例:
在您的特定场景中,将克隆过程应用于 Person 和 Animal 对象:
<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>
请记住,应将 run 方法添加到 Animal 原型而不是单个实例。
以上是如何在 JavaScript 中将通用对象转换为类型化实例?的详细内容。更多信息请关注PHP中文网其他相关文章!