在尝试访问对象的属性时,不仅会在对象上查找该属性,还会在对象的原型()、原型( prototype )等上查找该属性,直到找到具有匹配名称的属性或到达原型链的末尾为止。
这是否意味着当一个属性被添加到对象中时,它被添加到它的原型中?
即。在以下代码中
a = {};
a.foo = "hello";实际上存储为
a.prototype.foo = "hello"发布于 2019-10-08 15:39:01
不是的。如果将属性存储在对象上,则将其存储在对象上。
它说,当您尝试访问它(即读取它,而不是写它),那么,如果在对象上找不到它,它将查找它的原型链。
const a = {};
const b = Object.create(a);
a.foo = "Foo";
console.log(b.foo);
发布于 2019-10-08 15:40:03
No.
这意味着当搜索一个属性时,如果它不存在于指定的对象上,则搜索对象的原型。
如果该属性仍未在该原型上找到,它将查看原型是否有自己的原型--然后搜索该原型。
这个过程会被重复,直到找到一个结果,或者没有更多的原型来查找属性--在这种情况下,返回undefined。
发布于 2019-10-08 15:49:48
不是的。您甚至不能使用赋值更改原型值:
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__.foohttps://stackoverflow.com/questions/58289677
复制相似问题