当JSON.stringify对象时,Object.create不正确

时间:2013-05-16 11:51:47

标签: javascript

我尝试使用b

从对象a创建新对象Object.create
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/

的链接

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

我更新了你的小提琴

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

for( var k in b ){
    if (!b.hasOwnProperty(k)) continue;
    html.push( 'b.'+ k +':' + b[k] );
}
  1. 您需要使用hasOwnProperty
  2. 我更改了第二个for循环的索引
  3. 如果你看一下Object.create的作用,你传入的第一个参数就是新对象的原型。这意味着b拥有原型链中的所有东西。 hasOwnProperty修复了这个问题,因为如果测试的属性是在对象本身上,而不是原型链中的某个地方,它只返回true。

    现在它表现得像我想的那样。

答案 2 :(得分:0)

未定义的

b.n是预期的行为。为了得到你想要的东西,你可能想尝试一下。

var a = {};
var b = {a:a};

a.n = 1;
b.m = 2;

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