对象.创建,JSON时不正确.对对象进行字符串化

Object.create, not correct when JSON.stringify the object

本文关键字:对象 字符串 不正确 创建 JSON      更新时间:2023-09-26

我尝试使用Object.create从对象a创建一个新对象b

var a ={}; 
var b = Object.create( a );
a.n = 1;
b.m = 2;

当我通过for .. in ..迭代两个对象时,它显示正确的值。但JSON。Stringify不打印正确字符串。

JSON.stringify( b )

应该打印成{"n":1,"m":2}。但它只打印{"m":2}。有什么建议吗?

我已经在jsfiddle中添加了它。jsfiddle链接http://jsfiddle.net/V3Nxs/

这是因为nb的原型属性,而JSON.stringify只适用于那些对对象上的hasOwnProperty返回true的属性。

我更新了你的小提琴

http://jsfiddle.net/V3Nxs/2/

for( var k in b ){
    if (!b.hasOwnProperty(k)) continue;
    html.push( 'b.'+ k +':' + b[k] );
}
    你需要使用hasOwnProperty我改变了第二个for循环的索引

如果你看一下Object。你传入的第一个参数是新对象的原型。这意味着在原型链中,b拥有a所拥有的一切。hasOwnProperty修复了这个问题,因为只有当被测试的属性在对象本身上,而不是在原型链的某个地方时,它才返回true。

未定义b.n是预期的行为。想要得到你想要的,你可以试试这个。

var a = {};
var b = {a:a};
a.n = 1;
b.m = 2;

现在b.a.n被设置为1, JSON.stringify将其包含在输出中