function God(){} function Foo(){ this.name="Foo~~"; } Foo.prototype = new God(); function Eoo(){ this.sex = "boy"; } Eoo.prototype = new Eoo(); var f1 = new Foo(); console.log(Foo.prototype); // God{} console.log(typeof Foo.__proto__); // function console.log(typeof f1); // object console.log(f1.__proto__); // God{} console.log(f1.__proto__.__proto__); // object{} console.log(f1.__proto__.__proto__.__proto__) // null var f2 = new Eoo(); console.log(Eoo.__proto__); // function(){} console.log(Object.__proto__); // function(){} console.log(God.__proto__); // function(){} // 因为Eoo(){},Object(){},God(){}都是由函数构造出来, Xxx.__proto__构造函数的原型对象 var f2 = new Function(); console.log(Function.prototype); // function(){} f2有对象构造而来 console.log(typeof f2); // function console.log(f2.__proto__); // function(){} f2.__proto__===Function.prototype console.log(f2.__proto__.__proto__) // object{} f2.__proto__.__proto__===Object.prototype console.log(f2.__proto__.__proto__.__proto__) // null // 原型对象也是对象啊,它的__proto__属性,又指向谁呢,同理,指向它的构造函数的原型对象。 // 即f2.__proto__.__proto__,这里是Object.prototype. // JS中万物皆对象,故所有对象都有__proto__属性,这个用来指向该对象的构造函数