将javascript对象从服务器加载到现有javascript对象中
我可能不是第一个这样做的人,但是我找不到或者不知道怎么做 在我的javascript中,我有一个具有5个属性的对象,它们都是具有g数据属性和函数的对象 看起来是这样的将javascript对象从服务器加载到现有javascript对象中,javascript,jquery,Javascript,Jquery,我可能不是第一个这样做的人,但是我找不到或者不知道怎么做 在我的javascript中,我有一个具有5个属性的对象,它们都是具有g数据属性和函数的对象 看起来是这样的 function Maindata() { var obj = this; this.id = null; this.profile= new Profile(); this.company= new Company(); //and more this.getid = functi
function Maindata() {
var obj = this;
this.id = null;
this.profile= new Profile();
this.company= new Company();
//and more
this.getid = function(){
return obj.id;
};
}
而profile
和company
对象也具有数据和功能
现在我从服务器上得到一个对象,它是同一个对象,但只有数据,没有函数
现在,我想将检索到的对象的所有属性从服务器投影到我的JavaScript对象
我读过使用jQuery Extend的书,但这对我来说不起作用,因为它只保留根(Maindata)对象上的函数,而不保留子对象上的函数
如何也从子对象加载所有数据
是否必须逐个扩展子对象,如下所示:
$.extend(true, maindata.profile, result.profile);
$.extend(true, maindata.company, result.company);
或者还有其他解决方案吗?首先,一般来说,您希望将所有功能放在原型上,并将所有数据放在对象本身上:
function Maindata() {
var obj = this;
this.id = null;
this.profile= new Profile();
this.company= new Company();
//and more
}
Maindata.prototype.getid = function() {
return this.id;
};
原型作为构造函数分配给使用Maindata
创建的每个对象,并在所有Maindata
实例中共享。因此,它可能更有效,更容易推理。这有点像其他语言中的类
这意味着您可以:
// creates an object with the given prototype without running the constructor
var o = Object.create(Maindata.prototype);
$.extend(o, result); // copy data over
// Object.assign(o, result); // with ES2015 assign syntax.
如果对象是嵌套的,则需要以嵌套方式为子属性执行此操作。您不能免费获取类型,因为它们没有在JSON中编码。您可以实现一个自定义序列化程序来自动为您执行此操作-一些库(如主干)可以为您执行此操作,但在我看来,它们的工作非常糟糕,您自己执行此操作非常简单