我尝试使用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/
的链接答案 0 :(得分:4)
这是因为n
是b
的原型属性,而JSON.stringify
仅适用于对象上hasOwnProperty
返回true的属性。
答案 1 :(得分:1)
我更新了你的小提琴
for( var k in b ){
if (!b.hasOwnProperty(k)) continue;
html.push( 'b.'+ k +':' + b[k] );
}
如果你看一下Object.create的作用,你传入的第一个参数就是新对象的原型。这意味着b拥有原型链中的所有东西。 hasOwnProperty修复了这个问题,因为如果测试的属性是在对象本身上,而不是原型链中的某个地方,它只返回true。
现在它表现得像我想的那样。
答案 2 :(得分:0)
b.n
是预期的行为。为了得到你想要的东西,你可能想尝试一下。
var a = {};
var b = {a:a};
a.n = 1;
b.m = 2;
现在b.a.n
设置为1
,JSON.stringify
将其包含在输出中。