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。
出世Sunny
TA贡献5条经验 获得超5个赞
是你搞错了,在这里a是没有prototype的,prototype是构造器的原型,而a是通过构造器(new)产生的对象,这里A是构造器,a是new出来的对象,所以正确的是这样
a.__proto__==A.prototype //true 这个可以自己在浏览器的控制台试
也就是说构造器才有prototype,所有对象都有__proto__,这个可以控制台一个一个往下试。
添加回答
举报
0/150
提交
取消