为了账号安全,请及时绑定邮箱和手机立即绑定

prototype和__proto__ ?

prototype和__proto__ ?

咕咕问 2016-11-12 08:47:47
function A(){};var a = new A();a.prototype == undefined    为什么,按照prototype来说,应该是 function A 才对???网上查的到有这样说法所有的js对象里面都有一个匿名元素__proto__,指向的是当前对象的父元素的父元素(原型的原型),如果调用当前对象的方法中没有这个方法,就会在当前对象的__proto__里面找,如果还没有再往上找能给我讲下prototype和__proto__不?
查看完整描述

3 回答

已采纳
?
千秋此意

TA贡献158条经验 获得超187个赞


1、new出来的实例对象其 __proto__ 指向其构造函数的prototype,即:

a.__proto__ === A.prototype // true

2、a.__proto__ 和 A.prototype 指向同一个对象,这个对象有一个 constructor 属性,其指向构造函数A本身。所以上面的也可以这样写:

a.__proto__ === a.constructor.prototype // true
//              这里a本身是没有constructor这个属性的,所以会访问a.__proto__.constructor

3、然后是 prototype 这个属性是只有函数对象才有的,一般的对象并没有这个属性,而对象的 __proto__ 所指向的还是一个普通的对象,整条原型链上的对象都不会有prototype属性,所以就有了 a.prototype == undefined。




查看完整回答
3 反对 回复 2016-11-12
?
出世Sunny

TA贡献5条经验 获得超5个赞

是你搞错了,在这里a是没有prototype的,prototype是构造器的原型,而a是通过构造器(new)产生的对象,这里A是构造器,a是new出来的对象,所以正确的是这样

a.__proto__==A.prototype   //true   这个可以自己在浏览器的控制台试

也就是说构造器才有prototype,所有对象都有__proto__,这个可以控制台一个一个往下试。


查看完整回答
反对 回复 2016-11-12
  • 3 回答
  • 4 关注
  • 1609 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信