gpt4 book ai didi

javascript - 将普通对象转换为javascript中的类实例

转载 作者:可可西里 更新时间:2023-11-01 01:40:20 27 4
gpt4 key购买 nike

function Person() {
var self = this;

self.personName="";
self.animals=[];
}

function Animal(){
var self=this;

self.animalName="";
self.run=function(meters){
.....
}
}

服务器响应:

 [{personName:John,animals:[{animalName:cheetah},{animalName:giraffe}]} , {personName:Smith,animals:[{animalName:cat},{animalName:dog}]} ]

我正在从服务器获取 Person 数组。我想将通用 Person 数组转换为类型化 Person 数组。所以我可以使用

 persons[0].Animals[2].Run();

我创立了 Javascript

 Object.create(Person,person1);

但我想要支持数组的跨浏览器版本

  ObjectArray.create(Person,persons);

 Object.create(Person[],persons);

最佳答案

在 JavaScript 中创建对象需要调用其构造函数。因此,首先您需要找到正确的参数,这些参数可能并不总是只是属性。之后,您可以将所有公共(public)属性从 JSON 解析的对象重新分配给创建的实例。

一个通用的解决方案是每个构造函数接受任何看起来像实例(包括真实实例)的对象并克隆它们。创建适当实例所需的所有内部逻辑都将位于正确的位置。

或者甚至比重载构造函数更好的方法可能是在您的类上创建一个静态方法,该方法接受对象并从中创建实例:

Person.fromJSON = function(obj) {
// custom code, as appropriate for Person instances
// might invoke `new Person`
return …;
};

您的情况非常简单,因为您没有任何参数,只有公共(public)属性。要将 {personName:John,animals:[]} 更改为对象实例,请使用:

var personLiteral = ... // JSON.parse("...");
var personInstance = new Person();
for (var prop in personLiteral)
personInstance[prop] = personLiteral[prop];

您还可以为此使用 Object.assign 功能(或例如 jQuery.extend pre-ES6):

var personInstance = Object.assign(new Person(), personLiteral);

Animal 实例的创建工作类似。

由于 JSON 不传输有关类的任何信息,因此您必须先了解其结构。在您的情况下,它将是:

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]);
}
}

顺便说一句,您的 run 方法似乎可能会添加到 Animal.prototype 对象而不是每个实例上。

关于javascript - 将普通对象转换为javascript中的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11810028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com