prototype和__proto__ ?

function A(){};

var a = new A();

a.prototype == undefined    

为什么,按照prototype来说,应该是 function A 才对???

网上查的到有这样说法

所有的js对象里面都有一个匿名元素__proto__,指向的是当前对象的父元素的父元素(原型的原型),如果调用当前对象的方法中没有这个方法,就会在当前对象的__proto__里面找,如果还没有再往上找


能给我讲下prototype和__proto__不?

咕咕问
浏览 1614回答 3
3回答

千秋此意

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。

出世Sunny

是你搞错了,在这里a是没有prototype的,prototype是构造器的原型,而a是通过构造器(new)产生的对象,这里A是构造器,a是new出来的对象,所以正确的是这样a.__proto__==A.prototype   //true   这个可以自己在浏览器的控制台试也就是说构造器才有prototype,所有对象都有__proto__,这个可以控制台一个一个往下试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript