一般来说,__proto__是对象都有的一个属性,prototype是几乎所有函数都有的一个属性,这个属性是指向一个对象,这个对象包含了这个函数实例化共享的属性和方法。所以,可以这么理解,对象的__proto__指向某函数的prototype。
字符串对象、数值对象、布尔对象都可以由构造函数创建,于是可以这么举例:
var n=new Number(1);
n.__proto__===Number.prototype;//true
n是Number实例化的对象,n的__proto__指向函数Number的prototype,n就具有了Number对象共有的属性和方法。
n.__proto__.__proto__===Object.prototype;//true
n.__proto__指向的是Number.prototype,Number.prototype包含了Number函数实例共享的属性和方法,它是一个对象,也具有__proto__属性,对象的__proto__属性指向Object.prototype。
简单总结:
对于实例对象,一次__proto__指向其构造函数的prototype,两次__proto__指向Object.prototype。
注意:
构造函数的__proto__指向,比如Number.__proto__指向Function.prtotype。
Function.__proto__也指向Function.prtotype。(Function也是构造函数)。