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);
烙印99
TA贡献1829条经验 获得超13个赞
不。
这意味着当搜索一个属性时,如果它在指定的对象上不存在,则搜索该对象的原型。
如果在该原型上仍未找到该属性,则它会查看该原型是否具有自己的原型- 然后进行搜索。
重复这个过程,直到找到结果,或者没有进一步的原型来查找属性 - 在这种情况下undefined
返回。
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
添加回答
举报
0/150
提交
取消