更改父对象,不会更改其他对象的原型链
Changing parent object , doesn't change prototype chain in other
我有两个对象 foo 和 bar。 Object.create 构建对象 bar 将其原型设置为 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
只是对对象的引用。当您将其设置为原型时,它会在 bar
中创建第二个引用并引用同一个对象。然后,当您更改 foo
变量 时,它只是对对象的引用,以保留另一个变量(如数字),它会从 object
。所以你只有一个引用,它在 bar
的 prototype
中引用对象。
[]
被认为是变量的值。
-----
foo[obj address] ---> |obj|
-----
^
|
bar.prototype[obj address]
foo = 2
之后
-----
foo[2] |obj|
-----
^
|
bar.prototype[obj address]
我有两个对象 foo 和 bar。 Object.create 构建对象 bar 将其原型设置为 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
只是对对象的引用。当您将其设置为原型时,它会在 bar
中创建第二个引用并引用同一个对象。然后,当您更改 foo
变量 时,它只是对对象的引用,以保留另一个变量(如数字),它会从 object
。所以你只有一个引用,它在 bar
的 prototype
中引用对象。
[]
被认为是变量的值。
-----
foo[obj address] ---> |obj|
-----
^
|
bar.prototype[obj address]
foo = 2
-----
foo[2] |obj|
-----
^
|
bar.prototype[obj address]