1
<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,但是很复杂,还是不明白。任何人都可以给我一个简单明了的解释吗?谢谢。

4

1 回答 1

4

因为zack.__proto__is zack.constructor.prototype, and zack.constructoris Person, andzack没有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__,being Person.prototype,不能是undefined财产。

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

Person.prototype.prototype = Person.prototype;
于 2013-06-18T08:23:17.693 回答