与js中的__proto_和prototype混淆

confused with __proto_ and prototype in js

本文关键字:prototype 混淆 proto 中的 js      更新时间:2023-09-26
<script>
function Person(name) {
  this.name = name;
}
Person.prototype.kind = 'person'
var zack = new Person('Zack');
console.log(zack.__proto__ == Person.prototype); //=> true
console.log(zack.__proto__ == zack.prototype) //=> false
</script>

问题:

为什么这一行:console.log(zack.__proto__ == zack.prototype)显示false?我在网上查了__proto__prototype的区别,但是比较复杂,还是不懂。谁能给我一个简单明了的解释?谢谢。

因为zack.__proto__zack.constructor.prototype, zack.constructorPerson, zack没有定义名为prototype的属性

如果您选择console.log(zack.prototype),您将看到它是未定义的!

就是这样的

console.log(zack.__proto__ == Person.prototype); //=> true

zack.__proto__ Person.prototype .

console.log(zack.__proto__ == zack.prototype) //=> false

zack.__proto__Person.prototype,不能是undefined的属性

如果你想从实例化的变量访问Person的原型,你可以做一个小技巧我不推荐,因为它是递归的,在属性的无限循环中成功。

Person.prototype.prototype = Person.prototype;