javascript - 更改父对象,不会更改其他对象的原型(prototype)链

标签 javascript prototype chain

我有两个对象 foo 和 bar。 Object.create 构建的对象 bar 将其原型(prototype)设置为 foo - 好的。当我更新 foo 属性时一切正常,但是当我将整个 foo 对象更改为数字时,对象栏不会改变。好像之前的对象 foo 在某个地方但我不知道在哪里。我对此很好奇。

var foo = { name: "foo" };
var bar = Object.create(foo);
foo = 2 //I change foo 
console.log(bar) 

//in Chrome console I see:
Object {}
__proto__: Object // __proto__ of bar shows to object 
   name: "foo"
  __proto__: Object

帮助。也许我错过了一些明显的东西。

最佳答案

因为您的foo 只是对该对象的引用。当您将其设置为原型(prototype)时,它会在 bar 中创建第二个引用并引用同一对象。然后,当您更改 foo variable(它只是对该对象的引用)以保留另一个变量(如数字)时,它会删除 foo 引用来自对象。所以你只有一个引用,它在引用对象的 barprototype 中。

[] 被认为是变量的值。

                        -----
  foo[obj address] ---> |obj|
                        -----
                          ^
                          |
                 bar.prototype[obj address]

foo = 2 之后

                        -----
   foo[2]               |obj|
                        -----
                          ^
                          |
                 bar.prototype[obj address]

关于javascript - 更改父对象,不会更改其他对象的原型(prototype)链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46250732/

相关文章:

javascript - 如何在php中允许在textarea中输入?

javascript - 检索 javascript 原型(prototype)链中的顶级原型(prototype)

javascript - 原语上的 isPrototypeOf() 函数

python - 如何通过组合元组和静态字符串来使用 itertools 创建字典

javascript - jQuery 的链管

javascript - 当用作等宽字体时,使来自非等宽字体的替换字符以正确的宽度显示

javascript - 即使得到响应,数据表也显示零行

javascript - 为什么在节点更改时在原型(prototype)内部分配 var node=this.obj 而不是 this.obj?

jquery - 尝试用 .then、.fail 和 .reject 打破 jQuery promise 链

javascript - 使用样式在 React.js 中设置背景