1. 程式人生 > >JS 中的 __proto__ 、prototype、constructor

JS 中的 __proto__ 、prototype、constructor

首先 先解釋這三個屬性:

  (1) prototype  : 它是函式獨有的,從一個函式指向一個物件(函式的原型),含義是函式的原型物件,也就是這個函式所建立的例項的原型物件。(普通函式的該屬性沒有作用)

    作用:讓每一個例項共享同一套方法。

  (2) __proto__  : 它是物件獨有的,從一個物件指向一個物件。(即指向他們的原型物件,可以理解為父物件)

     作用:當訪問一個物件的屬性時,如果該物件內部不存在這個屬性,那麼就會去它的__proto__屬性所指向的那個物件(可以理解為父物件)裡找,如果父物件也不存在這個屬性,則繼續往父物件的__proto__屬性所指向的那個物件(可以理解為爺爺物件)裡找,如果還沒找到,則繼續往上找….直到原型鏈頂端null(可以理解為原始人。。。),此時若還沒找到,則返回undefined(可以理解為,再往上就已經不是“人”的範疇了,找不到了,到此為止)。由以上這種通過__proto__

屬性來連線物件直到null的一條鏈即為我們所謂的原型鏈

  (3)constructor : 它是物件獨有的, 從一個物件指向一個物件。(即指向該物件的建構函式),每個物件都有建構函式。所有函式最終都是由Function()建構函式得來,所以constructor屬性的終點就是Function()。

    注意:Function這個物件比較特殊,它的建構函式就是它自己(因為Function可以看成是一個函式,也可以是一個物件)。

  總結:

      ⑴ __proto__constructor屬性是物件所獨有的;

      ⑵ 

prototype屬性是函式所獨有的,因為函式也是一種物件,所以函式也擁有__proto__constructor屬性。(即只有函式有prototype屬性,其餘兩個函式物件都有。)

      ⑶ constructor屬性的含義就是指向該物件的建構函式,所有函式(此時看成物件了)最終的建構函式都指向Function()

        

    

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Object、Array、Function 的關係:

  (1)  函式是一種物件。

  (2) 物件都是通過函式建立的

  (3) Object 是一切引用型別的父類,所有能被Object接收的均為物件(陣列是一種物件)

引用資料型別:Object 、Array 、Function 、Data等。

 

有人說,Object型別相當於哺乳動物,Array相當於犬科動物,Function相當於貓科動物,他們分別是一種狗,一種貓,一種豬,一種鴨。他們彼此之間並無直接聯絡,但同屬動物(引用型別)。