Javascript 原型(prototype)继承和 Object.create()?

标签 javascript prototype

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/

相关文章:

Spring - 简单地创建Supplier<MyPrototypeBean>

javascript - 一个不涉及模拟经典继承的原型(prototype)继承的例子?

javascript - beforeunload on IE 11 - 不提示用户不起作用

javascript - 如何找出发出警报的位置?

javascript - Ember 模板中出现未闭合元素错误

javascript - 将原型(prototype)分配给Object.create原型(prototype)有什么区别

javascript - 不理解 JavaScript 原型(prototype)

javascript - 将键和原型(prototype)方法转换为驼峰式

javascript - 为什么我在 Rails jQuery POST 请求中收到 401 错误?

javascript - 为什么我的 fileReader 被包裹在无限循环的 Promise 中?