function对象结构(Persion) Persion{ eat:f() __proto__:Object{ constructor: } }
_proto__ 属性,它是对象所独有的 __proto__属性都是由一个对象指向一个对象,即指向它们的原型对象 它的做用就是当访问一个对象的属性时,若是该对象内部不存在这个属性, 那么就会去它的__proto__属性所指向的那个对象里找,若是父对象也不存在这个属性, 则继续往父对象的__proto__属性所指向的那个对象里找,若是还没找到, 则继续往上找…直到原型链顶端null,此时若还没找到,则返回undefined
prototype属性 它是函数所独有的,它是从一个函数指向一个对象。它的含义是函数的原型对象, 也就是这个函数(其实全部函数均可以做为构造函数)所建立的实例的原型对象 prototype属性 做用就是包含能够由特定类型的全部实例共享的属性和方法, 也就是让该函数所实例化的对象们均可以找到公用的属性和方法。任何函数在建立的时候, 其实会默认同时建立该函数的prototype对象
p.proto === Persion.prototype,它们两个彻底同样ide
总结: 一、咱们须要牢记两点:①__proto__和constructor属性是对象所独有的; ② prototype属性是函数所独有的,由于函数也是一种对象,因此函数也拥有__proto__和constructor属性。 二、__proto__属性的做用就是当访问一个对象的属性时,若是该对象内部不存在这个属性, 那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null, 而后返回undefined,经过__proto__属性将对象链接起来的这条链路即咱们所谓的原型链。 三、prototype属性的做用就是让该函数所实例化的对象们均可以找到公用的属性和方法, 即p.__proto__ === Persion.prototype。 四、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方法 }