javascript - 与js中的__proto_和prototype混淆

标签 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 ,不过比较复杂,还是不太明白。谁能给我一个简单明了的解释?谢谢。

最佳答案

因为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 的原型(prototype),你可以做一个我不推荐的小技巧,因为它是递归的并且在属性的无限循环中成功。

Person.prototype.prototype = Person.prototype;

关于javascript - 与js中的__proto_和prototype混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17163811/

相关文章:

javascript - ng-if 消除了 Material Design lite 涟漪效应

javascript - Angular4/Typescript 中的 Angular ForEach?

javascript - ionic invalid key hash facebook 不匹配任何存储

javascript - 如何访问 Vuejs 设置函数内传递的 props(Composition API)

javascript - Angular 拦截器给出空白输出,没有错误

javascript - 具有不同键的多个 v-for 循环仍然导致重复键错误

javascript - 如何使用 new Date() 解析 JSON 字符串并获取对象中的 Date 属性?

javascript - 检测带有跳跃 Action 的滑动手势

javascript - node.js 中模块模式的最佳实践

javascript - Fluxible 和 Navlink 路由错误