Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将javascript对象从服务器加载到现有javascript对象中_Javascript_Jquery - Fatal编程技术网

将javascript对象从服务器加载到现有javascript对象中

将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

我可能不是第一个这样做的人,但是我找不到或者不知道怎么做

在我的javascript中,我有一个具有5个属性的对象,它们都是具有g数据属性和函数的对象

看起来是这样的

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中编码。您可以实现一个自定义序列化程序来自动为您执行此操作-一些库(如主干)可以为您执行此操作,但在我看来,它们的工作非常糟糕,您自己执行此操作非常简单