Javascript 更新继承的属性

Javascript 更新继承的属性,javascript,Javascript,为什么子对象bar更新inherited属性x对父对象foo没有影响,但相反 @编辑 创建后,当父对象现在更新阴影属性时,子own属性不受影响。 这都是关于原型的bar对象没有x属性,因此当您尝试访问它时,将涉及原型链,您将获得foo.x的值。然后更新foo.x,在访问bar.x时,您还会看到另一个值 但当您设置bar.x时,将在bar对象中创建x属性foo.x是另一个,因此它将保持不变 您应该避免在代码中使用\uuuuu proto\uuuu。它是特定于浏览器的功能(这就是为什么它的名称中有

为什么子对象
bar
更新
inherited
属性
x
对父对象
foo
没有影响,但相反

@编辑 创建后,当父对象现在更新
阴影属性时,子
own
属性不受影响。


这都是关于原型的
bar
对象没有
x
属性,因此当您尝试访问它时,将涉及原型链,您将获得
foo.x
的值。然后更新
foo.x
,在访问
bar.x
时,您还会看到另一个值

但当您设置
bar.x
时,将在
bar
对象中创建
x
属性
foo.x
是另一个,因此它将保持不变


您应该避免在代码中使用
\uuuuu proto\uuuu
。它是特定于浏览器的功能(这就是为什么它的名称中有下划线)。

指定给对象属性会创建或更新对象自己的属性,而原型链上不会搜索继承的属性


请参阅ECMAScript

如果它会以另一种方式工作,那么它就不是继承了…这个问题以前在这里被问过:,但还没有一个合适的答案。赋值的工作方式不同于请求值或对其进行变异。更多信息请点击此处:
var foo = {x: 1}
var bar = {__proto__: foo} // __proto__ specific to implementation
var bar = Object.create(foo) // same result as above with standard API 
console.log(bar.x) // 1
foo.x = 2
console.log(bar.x) // 2
bar.x = 3
console.log(foo.x) // 2
foo.x = 4
console.log(bar.x) // 3