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

时间:2016-12-24 10:29:04

标签: javascript prototype

JS中的原型让我感到困惑。

假设我有一个这样的对象:

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)。除此之外还有什么机制?

1 个答案:

答案 0 :(得分:0)

从技术上讲,当您用另一个新值替换一个对象时,该对象的旧引用将从该变量中被切除。但是在链接变量消失之前它仍然存在。

>>> df.drop_duplicates(subset=['Col2','Col3'])
   Col1 Col2  Col3
0    12   AB    13
3    12   AC    14

现在,每个人都会认为,y将使用属性var x = { a:10 } var y = { x }; x = 10; 携带值10。但事实并非如此,正如我上面说的那样,x的旧内存位置将保持活跃状态​​,直到收集垃圾为止。同时,x将为新值分配更新的内存位置。

因此,在您的情况下,您只是通过替换其他值来丢失x的引用。因此,在替换a的值后,您无法在任何地方使用isPrototypeOf(obj)