与js中的__proto_和原型相混淆

时间:2013-06-18 08:16:55

标签: javascript

<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)显示为假?我在网上查看了__proto__prototype之间的区别,但它很复杂,仍然不明白。有人可以给我一个简单明了的解释吗?感谢。

1 个答案:

答案 0 :(得分:3)

由于zack.__proto__zack.constructor.prototype,而zack.constructorPersonzack未定义名为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.prototypeundefined,不能是Person.prototype.prototype = Person.prototype; 属性。

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

{{1}}