与js中的__proto_和prototype混淆
confused with __proto_ and prototype in js
<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)
显示false?我在网上查了__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的原型,你可以做一个小技巧我不推荐,因为它是递归的,在属性的无限循环中成功。
Person.prototype.prototype = Person.prototype;
相关文章:
- 直接在函数声明上使用function.prototype.bind
- 如何迭代Array.prototype函数
- 将错误与if语句混淆
- Object.prototype using 'this'
- jquery自定义事件混淆
- JavaScript加入多个数组混淆
- 在不兼容的接收器上调用的方法Set.prototype.add未定义
- 如何告诉闭包javascript编译器不要混淆webkitAudioContext的方法名称
- 为什么可以't我用Set对象调用Array.prototype.map
- ExtJS 4 Object.prototype fail
- 如何通过Prototype或jquery移除子类的父类基类
- 复选框:使用Array.prototype.forEach调用推送选中订单,
- 将setTimeout()包装器实现为Element.prototype中的方法
- Object.prototype.hasOwnProperty.call() vs Object.prototype.h
- Javascript一行,否则速记混淆
- html报价与php混淆
- 混淆变量名称的小型化器
- 仍然与js Prototype混淆
- 与js中的__proto_和prototype混淆
- Prototype和__proto__混淆的结果