2014-07-07 25 views
0

我想从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复制对象的方法,因为它们都需要直接设置'this',所以它们都不适用于我的情况。

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

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

更新:我不能只是 “切入正题VAR测试= JSON.parse(? '{ ”名“: ”测试“}');”因为我的对象将有其他类型,如:

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

降“新”经营者和刚刚返回'JSON.parse()来'的结果呢?或者可能将所有结果包装到一个新对象中,然后返回该对象。 – SyntaxTerror

+2

为什么不只是'JSON.parse(...)'?这将您的JSON解析为一个JavaScript对象。 – War10ck

+0

是不是'JSON.parse()'本身的返回值正是你想要的? – Pointy

回答

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"}'); 

这确实是我想要的。

0

你可以自动通过一个复制每个属性之一:

var temp = JSON.parse(myJSON); 

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

我发现这件事,并在您回答之前发布。 – CHRIS