我正试图向一位同事解释原型(prototype)继承的罕见用例,但我被这并不像我预期的那样工作这一事实所困扰。
const baseobj = { baseproperty: 'original'};
const x = Object.create(baseobj);
//should add properties to x, not the base
x.newproperty = 'bar';
console.assert(x.newproperty != baseobj.newproperty);
//so far so good
//should modify the base, not x
x.baseproperty = 'foo';
console.assert(x.baseproperty == baseobj.baseproperty);
//this assert failed, property is on x!?
我很困惑。据我所知,分配是一个两步过程,一个是查找属性,另一个是分配给它。那么到底为什么 baseproperty
的查找没有返回(并因此修改)baseobj.baseproperty
?
我知道一些这样的东西是 angularjs 作用域如何工作的关键,但我不知道这里具体发生了什么。
最佳答案
分配给对象实例的属性总是会在目标对象上创建一个“自己的”属性(当然如果不存在的话)。原型(prototype)属性永远不会受到此类分配的影响,即使与名称匹配的原型(prototype)链属性确实存在。
赋值后,对象上的“own”属性当然会隐藏原型(prototype)链属性。
关于javascript - 分配给原型(prototype)属性不应该在原型(prototype)上覆盖它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42034492/