为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2021-11-12 18:30:14
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"
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

不。如果您将属性存储在对象上,那么您将其存储在对象上。


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


const a = {};

const b = Object.create(a);


a.foo = "Foo";


console.log(b.foo);


查看完整回答
反对 回复 2021-11-12
?
烙印99

TA贡献1829条经验 获得超13个赞

不。

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

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

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


查看完整回答
反对 回复 2021-11-12
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

不。你甚至不能使用赋值来改变原型值:


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


查看完整回答
反对 回复 2021-11-12
  • 3 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信