Javascript 创建(someObject)函数不继承属性

Javascript 创建(someObject)函数不继承属性,javascript,Javascript,使用object.create(someObject)方法创建对象时,原始方法的属性不是由创建的方法派生的。如何使其派生现有属性 > a = {} > a.p1 = '8'; // add a property to object > b = Object.create(a); > b // b does not inherit the property p1. {} 要重现错误,请使用节点控制台,如下所示: $ node > a = {} {} >

使用object.create(someObject)方法创建对象时,原始方法的属性不是由创建的方法派生的。如何使其派生现有属性

> a = {}

> a.p1 = '8'; // add a property to object

> b = Object.create(a);

> b // b does not inherit the property p1.
{}
要重现错误,请使用节点控制台,如下所示:

$ node
> a = {}
{}
> a.p1 = 2;
2
> b = Object.create(a);
{}
> b
{}
> a
{ p1: 2 }
> 

原型属性将不是打印到控制台的字符串表示的一部分

您可以验证是否确实可以调用
b.p1
,并且相应的值为2


您也可以尝试打印
b.uuu proto\uuuuuu
,它提供
{p1:2}

没有任何错误,所有都正常工作。发件人:

方法创建一个具有指定的原型对象和属性的新对象

对象是使用原型创建的,但原型从未显示在节点中(以及我知道的任何浏览器控制台中)。您可以使用
b.\uuuu proto\uuuu


你错了;对象b将继承p1。我可以在我的浏览器控制台上证明这一点;可能您尝试此操作时语法不正确?$node>a={}{}>a.p1=2;2>b=对象。创建(a);{}>b{}>a{p1:2}>奇怪,我可以重现OP的问题。@wumm-也许这是一个节点错误。看起来只是一个显示问题
b.p1
给出了
2
。只是好奇而已。大约5分钟前,你认为重现这个问题很奇怪,这意味着你不知道答案。“您是如何这么快找到答案的。@Talespin_Kit在节点控制台中试用后,我检查了MDN文档,以确保正确记住Object.create的功能。在那里,我刚刚意识到它从一个原型中创建了一个对象。所以我试着展示这个原型,它确实起了作用。stringify不会序列化原型属性-已经有一个相关的SO问题:接受的答案有指向ES规范的链接。