首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象的属性是否存储在其原型中?

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

Stack Overflow用户
提问于 2019-10-08 15:37:30
回答 3查看 34关注 0票数 0

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

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

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

即。在以下代码中

代码语言:javascript
复制
a = {};
a.foo = "hello";

实际上存储为

代码语言:javascript
复制
a.prototype.foo = "hello"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-08 15:39:01

不是的。如果将属性存储在对象上,则将其存储在对象上。

它说,当您尝试访问它(即读取它,而不是写它),那么,如果在对象上找不到它,它将查找它的原型链。

代码语言:javascript
复制
const a = {};
const b = Object.create(a);

a.foo = "Foo";

console.log(b.foo);

票数 1
EN

Stack Overflow用户

发布于 2019-10-08 15:40:03

No.

这意味着当搜索一个属性时,如果它不存在于指定的对象上,则搜索对象的原型。

如果该属性仍未在该原型上找到,它将查看原型是否有自己的原型--然后搜索该原型。

这个过程会被重复,直到找到一个结果,或者没有更多的原型来查找属性--在这种情况下,返回undefined

票数 1
EN

Stack Overflow用户

发布于 2019-10-08 15:49:48

不是的。您甚至不能使用赋值更改原型值:

代码语言:javascript
复制
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);

这是:

代码语言:javascript
复制
a.prototype.foo = "hello"

不是访问a的原型。正确的方法是:

代码语言:javascript
复制
Object.getPrototypeOf(a).foo

或不太正式

代码语言:javascript
复制
a.__proto__.foo
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58289677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档