javascript - 为什么对象保留其继承的属性?
问题描述
function Dog(name){
this.name=name;
}
let dogA=new Dog('Paul');
Dog.prototype.eat=true;
dogA.eat; //true
现在我销毁了 Dog.prototype,为什么 dogA.eat 还在那里?
Dog.prototype=null;
dogA.eat;// Still true?
我想dogA.eat
继承自Dog.prototype
. 现在Dog.prototype
没了。怎么可能dogA.eat
还存在?
解决方案
该属性eat
存储在dogA.__proto__
. 当您使用new
运算符创建 的实例dogA
时Dog
,javascript 将执行此操作dogA.__proto__ = Dog.prototype = someObject
。现在你做Dog.prototype = null
,但dogA.__proto__
仍然等于someObject
。所以dogA.eat
还是会true
的。如果你做dogA.__proto__ = null
,那么dogA.eat
就会undefined
。