对象的属性是否存储在其原型中?

MDN 文档说https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain#Inheriting_properties

尝试访问对象的属性时,不仅会在对象上查找该属性,还会在对象的原型、原型的原型等上查找该属性,直到找到具有匹配名称的属性或结束到达原型链。

这是否意味着当一个属性被添加到对象时,它会被添加到它的原型中?

IE。在下面的代码中

a = {};
a.foo = "hello";

实际上存储为

a.prototype.foo = "hello"


繁花不似锦
浏览 270回答 3
3回答

qq_笑_17

不。如果您将属性存储在对象上,那么您将其存储在对象上。它说当您尝试访问它(即读取它,而不是写入它)时,如果在对象上找不到它,它将查找它的原型链。const a = {};const b = Object.create(a);a.foo = "Foo";console.log(b.foo);

烙印99

不。这意味着当搜索一个属性时,如果它在指定的对象上不存在,则搜索该对象的原型。如果在该原型上仍未找到该属性,则它会查看该原型是否具有自己的原型- 然后进行搜索。重复这个过程,直到找到结果,或者没有进一步的原型来查找属性 - 在这种情况下undefined返回。

Cats萌萌

不。你甚至不能使用赋值来改变原型值:const p = Object.create(null);p.a = "initial value on prototype";const o = Object.create(p);console.log(o.a);o.a = "value set by object";console.log(o.a);console.log(p.a);和这个:a.prototype.foo = "hello"不是访问a的原型。正确的方法是:Object.getPrototypeOf(a).foo或不那么正式a.__proto__.foo
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript