我有一个JSON文件,其中包含有关我的工作的信息和数据,如下所示:
{
"Employes":[
{
"id": 1,
"fullName": "Test Test"
}
],
"Infos":[
{
"id": 1,
"address": "Test Test test test test",
"employes": 1
}
]
}
我想在JS代码上自动生成Employes
和Infos
类,并向其中添加一些方法。
fetchJSONFile是使用AJAX从JSON文件获取数据的功能:
function fetchJSONFile(callback) {
var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
var data = JSON.parse(httpRequest.responseText);
if (callback) callback(data);
}
}
};
httpRequest.open('GET', 'datas.json');
httpRequest.send();
}
因此,在generate函数上,我想自动生成类并为其分配对象,我尝试这样做:
function generate(nameOfObject){
fetchJSONFile(function(data){
employes = Object.assign(new Employes(), ...data[nameOfObject]);
console.log(employes);
});
}
在这一行中,我将JSON对象分配给我的Employes()
类,我的问题是如何自动生成JSON类型的Employes()
分配,因此如果Infos
是新{{1 }}成为新的Employes()
...等。
我想这样做,以便向这些类添加一些功能,例如Infos()
,addNew()
....等,所有关于CRUD的内容。
有什么解决办法吗?
答案 0 :(得分:2)
如果返回的对象只有2个键,则可以map
浏览条目并创建2个数组变量,如下所示:
如果您拥有2个以上的属性,则可以在内部switch
内使用map
:
function Employee() { this.defaultEmployeeProp = "default" }
function Infos() { this.defaultInfosProp = "default" }
const data={"Employes":[{"id":1,"fullName":"Test Test"}],"Infos":[{"id":1,"address":"Test Test test test test","employes":1}]}
const [employees, infos] = Object.entries(data).map(([key, values]) =>
values.map(e => Object.assign(key === "Employes" ? new Employee() : new Infos(), e))
)
console.log(employees)
console.log(infos)
如果您希望所有类型的对象都具有相同的prototype
,则map
内不需要三元数。创建一个通用构造函数或一个class
,然后创建class
的实例。如果您希望每种对象都有特定的行为,则可以始终extend
使用该类,并使用上一小节中提到的switch
function GenericConstructor() {
this.default = "default"
}
GenericConstructor.prototype.commonMethod = function() {
console.log("common method called")
}
const data={"Employes":[{"id":1,"fullName":"Test Test"}],"Infos":[{"id":1,"address":"Test Test test test test","employes":1}]}
const [employees, infos] = Object.entries(data).map(([key, values]) =>
values.map(e => Object.assign(new GenericConstructor(), e))
)
console.log(employees)
console.log(infos)
答案 1 :(得分:2)
您可以创建一个DynamicClass
类,它接受一个输入值,另外一个type
可以是Employes, Infos...
function DynamicClass (data, type) {
this.type = type;
// Init function
}
DynamicClass.prototype.xxxx = function () {}
您现在可以只使用数据对象来创建类。
fetchJSONFile(function(data){
for(var key in data) {
var classObj = new DynamicClass(data[key], key);
}
});