JS 中的原型(prototype)让我有些困惑。
假设我有一个这样的对象:
let a = {
b: 1
};
现在,我想创建另一个继承“a”属性的对象。
let obj = Object.create(a);
所以在这种情况下,我会将我的“obj”的 proto 链接到“a”的 proto,后者将链接到 Object.prototype。第一个问题是,它是否删除了 obj.proto 的链接以替换为 a.proto ?
现在让我们假设我这样做:
a = 2;
我认为它会更新内存中的“a”,删除他的引用。
所以现在如果我这样做:
a.isPrototypeOf(obj)
它在逻辑上返回 false。但奇怪的是 'obj' 仍然指向属性 b 并且可以访问它(obj.b print 1)。除此之外的机制是什么?
最佳答案
从技术上讲,当您用另一个新值替换一个对象时,该对象的旧引用将从变量中删除。但是在链接变量消失之前它仍然存在。
var x = { a:10 }
var y = { x };
x = 10;
现在,每个人都会认为,y 将带有属性 x
的值 10。但事实并非如此,正如我在上面所说的那样,x 的旧内存位置将保持事件状态,直到收集到 y 垃圾。同时,x 会为新值分配更新的内存位置。
因此,在您的情况下,您只是通过替换一些其他值而丢失了 a
的引用。因此,在替换 a
的值后,您不能在任何地方使用 isPrototypeOf(obj)
。
关于Javascript 原型(prototype)继承和 Object.create()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41312450/