来自JSON的Init对象

时间:2014-07-07 14:48:53

标签: javascript json

我想从JSON初始化一个对象;像这样:

function myObj(myJSON) {
    this = JSON.parse(myJSON);
}

var test = new myObj('{"name":"test"}');

但是由于您无法设置这个',上面的代码会出现此错误:

ReferenceError: invalid assignment left-hand side

我考虑过创建一个临时对象并试图像这样复制它:

function myObj(myJSON) {
    var tempObj = JSON.parse(myJSON);
    this.name = tempObj.name;
    // do the same for all other properties
}

var test = new myObj('{"name":"test"}');

哪个有效,但理想情况下我不想一个接一个地复制对象的每个属性。所以我找到了用JavaScript复制对象的方法,因为它们都需要直接设置'这个'

function myObj(myJSON) {
    var tempObj = JSON.parse(myJSON);
    this = tempObj.splice(0);
}

var test = new myObj('{"name":"test"}');

更新:我不能只是"切入追逐? var test = JSON.parse(' {" name":" test"}');"因为我的对象将有其他类型,例如:

function myObj(myJSON) {
    this = JSON.parse(myJSON);
    this.propertyNotFromJSON = 5;
    this.func = function() {
        this.propertyNotFromJSON++;
    }
}

2 个答案:

答案 0 :(得分:0)

function myObj(myJSON) {
    var tempObj = JSON.parse(myJSON);
    for(var prop in tempObj) this[prop] = tempObj[prop]; // copy all properties from the JSON
    this.propertyNotFromJSON = 5;
    this.func = function() {
        this.propertyNotFromJSON++;
    }
}

var test = new myObj('{"name":"test"}');

这就是我想要的。

答案 1 :(得分:0)

您可以通过以下方式逐个自动复制每个属性:

var temp = JSON.parse(myJSON);

for(prop in temp) {
 this[prop] = temp[prop];
}