js原型繼承

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方法
}
相關文章
相關標籤/搜索