<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
之间的区别,但它很复杂,仍然不明白。有人可以给我一个简单明了的解释吗?感谢。
答案 0 :(得分:3)
由于zack.__proto__
为zack.constructor.prototype
,而zack.constructor
为Person
,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.prototype.prototype = Person.prototype;
属性。
如果你想从实例化的变量中访问Person的原型,你可以做一个我不推荐的小技巧,因为它是递归的并且在无限的属性循环中成功。 / p>
{{1}}