javascript - 分配给原型(prototype)属性不应该在原型(prototype)上覆盖它吗?

标签 javascript prototype

我正试图向一位同事解释原型(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/

相关文章:

javascript - 如何从 parent 那里更新 child 的(从创建的列表中) Prop

Javascript下拉菜单onchange事件仅适用于一种功能

javascript - 确定当前是否正在左键单击按钮(按住单击)?

Javascript:让对象继承数组方法

javascript - 将函数原型(prototype)设置为新对象

javascript - 当我们改变父对象的原型(prototype)时 __proto__ 指向哪里?

javascript - nodejs pbkdf2sync 不是缓冲区错误

javascript - 如何正确地将 jQuery 插件导入 Node.JS?

user-interface - 使用 Balsamiq Mockups 或类似 Mockups 的软件的交互式 Storyboard?

javascript - `constructor` 属性的真正用途是什么?