我的客户端代码从服务器获取JSON“对象”,然后解析它.解析的对象包含一个’type’属性,该属性应该控制对象的类.
$.getJSON("foo.json").done(function(data, textStatus, xhr) {
$.each(data.objects, function(key, val)
{
if (val.type = "A") // make val into an object of class A, somehow?
...
else if (val.type = "B") // make val into an object of class B somehow?
... etc...
}
}
如何在不显式复制每个属性的情况下创建正确类型的JavaScript对象,或者 – 将解析后的对象转换为其他类型?
我已经阅读了一些关于__proto__的内容,但感觉这对于应该是一个小小的坚果来说是一个很大的大锤……
我见过类似的关于Java和Jackson的问题,但Javascript没有…
解决方法:
你可以做这样的事情
function ObjectFactory() {
this.newInstance = function(val) {
if (val.type == "A") return new A(val);
if (val.type == "B") return new B(val);
}
}
function A(data) {
// do something with the data
this.property = data.property;
}
function B(data) {
// do something with the data
this.property = data.property;
this.bSpecificProperty = data.bSpecificProperty;
}
$.getJSON("foo.json").done(function(data, textStatus, xhr) {
var objectFactory = new ObjectFactory();
var objects = $.map(data.objects, objectFactory.newInstance);
console.log(objects);
}
如果你给出了一个更好的例子,说明了正确的类型,以及一些样本数据,我可以提供更好的答案.