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

Javascript Object.create,当JSON.stringify对象时不正确,javascript,Javascript,我已尝试使用对象从对象a创建一个新对象b。创建 var a ={}; var b = Object.create( a ); a.n = 1; b.m = 2; 当我迭代两个对象通过for。。在..中显示正确的值。但是JSON.stringify没有打印正确的字符串 JSON.stringify( b ) 它应该像{n:1,“m:2}那样打印。但它只能像{“m”:2}那样打印。有什么建议吗 我把它加进去了。未定义JSFIDLE的链接是预期行为。为了得到你想要的,你可能想试试这个 var

我已尝试使用
对象从对象
a
创建一个新对象
b
。创建

var a ={}; 
var b = Object.create( a );

a.n = 1;
b.m = 2;
当我迭代两个对象通过
for。。在..
中显示正确的值。但是JSON.stringify没有打印正确的字符串

JSON.stringify( b )
它应该像
{n:1,“m:2}
那样打印。但它只能像
{“m”:2}
那样打印。有什么建议吗


我把它加进去了。未定义JSFIDLE的链接是预期行为。为了得到你想要的,你可能想试试这个

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

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

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

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

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

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

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

这是因为
n
b
JSON的原型属性。stringify
仅适用于对象上
hasOwnProperty
返回true的属性。

这是因为
n
b
JSON的原型属性。stringify
仅适用于对象上的
hasOwnProperty
返回true的属性。

我更新了你的小提琴

  • 您需要使用hasOwnProperty
  • 我更改了第二个for循环的索引
  • 如果查看Object.create的作用,那么传入的第一个参数是新对象的原型。这意味着b拥有a拥有的一切,在原型链中。hasOwnProperty修复了这个问题,因为它只在被测试的属性位于对象本身而不是原型链的某个位置时返回true

    现在它的行为就像我想你期望的那样。

    我更新了你的小提琴

  • 您需要使用hasOwnProperty
  • 我更改了第二个for循环的索引
  • 如果查看Object.create的作用,那么传入的第一个参数是新对象的原型。这意味着b拥有a拥有的一切,在原型链中。hasOwnProperty修复了这个问题,因为它只在被测试的属性位于对象本身而不是原型链的某个位置时返回true


    现在,它的行为符合我的预期。

    stringify打印什么?@Thilo请检查JSFIDLE LINKJSFIDLE在此处被阻止。包括完整的问题会让每个人都更容易。@rab:不,把相关的信息放在问题里。或者你不想让人们更容易帮助你吗?问题在哪里?b.n=1?stringify打印什么?@Thilo请检查jsfiddle linkjsfiddle在这里被阻止了。包括完整的问题会让每个人都更容易。@rab:不,把相关的信息放在问题里。或者你不想让人们更容易帮助你吗?问题在哪里?b.n=1?具体地说:
    JSON.stringify
    只包括可枚举的、自己的属性,不包括从原型继承的属性,也不包括不可枚举的属性。@Ankur您的答案有助于解决我的问题。打印正确的
    JSON.stringify
    的解决方案是什么?具体地说:
    JSON.stringify
    只包括可枚举的、自己的属性,而不是从原型继承的属性,也不是不可枚举的属性。@Ankur您的回答有助于解决我的问题。打印正确的JSON.stringify的解决方案是什么?