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