快捷导航

prototype和__proto__ ?

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

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员2

1、new出来的实例对象其 __proto__ 指向其构造函数的prototype,即:
a.__proto__===A.prototype//true2、a.__proto__ 和 A.prototype 指向同一个对象,这个对象有一个 constructor 属性,其指向构造函数A本身。所以上面的也可以这样写:
a.__proto__===a.constructor.prototype//true//这里a本身是没有constructor这个属性的,所以会访问a.__proto__.constructor3、然后是 prototype 这个属性是只有函数对象才有的,一般的对象并没有这个属性,而对象的 __proto__ 所指向的还是一个普通的对象,整条原型链上的对象都不会有prototype属性,所以就有了 a.prototype == undefined。
回复

使用道具 举报

是你搞错了,在这里a是没有prototype的,prototype是构造器的原型,而a是通过构造器(new)产生的对象,这里A是构造器,a是new出来的对象,所以正确的是这样
a.__proto__==A.prototype  //true  这个可以自己在浏览器的控制台试
也就是说构造器才有prototype,所有对象都有__proto__,这个可以控制台一个一个往下试。
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP