我很困惑JS中的原型。
假设我有这样一个对象:
let a = {
b: 1
};
let obj = Object.create(a);
现在假设我执行以下操作:
a = 2;
所以现在如果我执行:
a.isPrototypeOf(obj)
逻辑上它会返回false。但奇怪的是,'obj'仍然指向属性b并且可以访问它(obj.b打印1)。背后的机制是什么?
我很困惑JS中的原型。
假设我有这样一个对象:
let a = {
b: 1
};
let obj = Object.create(a);
a = 2;
a.isPrototypeOf(obj)
逻辑上它会返回false。但奇怪的是,'obj'仍然指向属性b并且可以访问它(obj.b打印1)。背后的机制是什么?
var x = { a:10 }
var y = { x };
x = 10;
现在,大家可能会认为,y将使用属性x的值10。但实际上并不是这样的,就像我上面说的那样,x的旧内存位置将一直保持活动状态,直到y被垃圾回收。同时,x将获得新的内存位置来存储新值。
所以在你的情况下,你只是通过替换其他值而失去了对a的引用。因此,在替换a的值之后,你不能在任何地方使用isPrototypeOf(obj)。
y.a
将是未定义的。我们可以通过 delete y.x.a
来删除它。 - Rajaprabhu Aravindasamy