<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
,不过比较复杂,还是不太明白。谁能给我一个简单明了的解释?谢谢。
最佳答案
因为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),你可以做一个我不推荐的小技巧,因为它是递归的并且在属性的无限循环中成功。
Person.prototype.prototype = Person.prototype;
关于javascript - 与js中的__proto_和prototype混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17163811/