function对象结构(Persion)
    Persion{
        eat:f()
        __proto__:Object{
           constructor:
        }
 }
_proto__ 属性,它是对象所独有的
__proto__属性都是由一个对象指向一个对象,即指向它们的原型对象
它的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,
那么就会去它的__proto__属性所指向的那个对象里找,如果父对象也不存在这个属性,
则继续往父对象的__proto__属性所指向的那个对象里找,如果还没找到,
则继续往上找…直到原型链顶端null,此时若还没找到,则返回undefined
prototype属性 它是函数所独有的,它是从一个函数指向一个对象。它的含义是函数的原型对象,
也就是这个函数(其实所有函数都可以作为构造函数)所创建的实例的原型对象
prototype属性 作用就是包含可以由特定类型的所有实例共享的属性和方法,
也就是让该函数所实例化的对象们都可以找到公用的属性和方法。任何函数在创建的时候,
其实会默认同时创建该函数的prototype对象

p.proto === Persion.prototype,它们两个完全一样

总结:
1、我们需要牢记两点:①__proto__和constructor属性是对象所独有的;
  ② prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__和constructor属性。

 2、__proto__属性的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,
    那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null,
    然后返回undefined,通过__proto__属性将对象连接起来的这条链路即我们所谓的原型链。

 3、prototype属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法,
    即p.__proto__ === Persion.prototype。

 4、constructor属性的含义就是指向该对象的构造函数,所有函数(此时看成对象了)最终的构造函数都指向Function
 代码:
 //function继承
function inherits(Child, Parent) {
    var F = function() { };
    F.prototype = Parent.prototype;
    Child.prototype = new F();//修改子类prototype指向
    //任何一个prototype对象都有一个constructor属性,指向它的构造函数
    //由于修改了child prototype为F则对应的constructor会指向F的prototype的constructor(也就指向了Parent的构造函数了),
    //所以要对应设置一个prototype的contructor
    Child.prototype.constructor = Child;
    Child.super = Parent.prototype;//设置super属性,方便调用父类的prototype方法
}