1. 程式人生 > 其它 >對建構函式與原型的一點理解

對建構函式與原型的一點理解

對建構函式的理解

建立物件的方式:

1.物件字面量

2.new Object()

3.自定義建構函式

ES6以前沒有類的概念,使用建構函式建立物件

建構函式是一種特殊的函式,主要用來初始化物件,即為物件成員變數賦初始值,它總與new一起使用。我們可以把物件中公共的屬性和方法抽取出來,然後封裝到這個函式裡面

注意:

1.建構函式用於建立某一類物件,其首字母要大寫

2.建構函式要和new一起使用才有意義

new執行時做的四件事:

1.在記憶體中建立一個新的空物件

2.讓this指向這個新的物件

3.執行建構函式裡面的程式碼,給這個新物件新增屬性和方法

4.返回這個新物件(所以建構函式裡不需要return)

例項成員,通過例項訪問

靜態成員,通過建構函式訪問

對原型的理解,(用原型實現繼承,手寫)

原型是建構函式裡的一個屬性,屬性名為prototype,這個prototype是一個物件

通過建構函式例項化得到的物件,物件身上系統自動加了一個

__proto__屬性,這個屬性指向建構函式的原型物件,也就是prototype屬性

呼叫方法時,先看物件自己有沒有這個方法,沒有的話就去原型上找

prototype上又有一個constructor屬性,指回建構函式本身

constructor主要用於記錄該物件引用於哪個建構函式,它可以讓原型物件重新指向原來的建構函式。

如果我們用物件給建構函式的prototype賦值,則必須手動寫上constructor指向原來的建構函式

建構函式方法很好用,但是存在浪費記憶體的問題

建構函式通過原型分配的函式是所有物件所共享的

js規定,每一個建構函式都有一個prototype屬性,指向另一個物件。注意prototype就是一個物件,這個物件的所有屬性和方法,都會被建構函式所擁有

我們可以把那些不變的方法,直接定義在prototype物件上,這樣所有物件的例項就可以共享這些方法

通過一個物件的_proto_可以找到它的原型物件,原型物件也是一個物件,可以通過原型物件的_proto_,最後找到Object.prototype。這個從例項的原型物件開始一直到Object.prototype就是原型鏈。

l 原型鏈繼承

核心:將父類的例項作為子類的原型

優點:

  1. 非常純粹的繼承關係,例項是子類的例項,也是父類的例項

  2. 父類新增原型方法/原型屬性,子類都能訪問到

  3. 簡單,易於實現

缺點:

  1. 要想為子類新增屬性和方法,必須在new Father()這樣的語句之後執行,不能放到構造器中
  2. 無法實現多繼承
  3. 來自原型物件的所偶遇屬性被例項共享
  4. 建立子類例項時,無法向父類構造器傳參
原型鏈頂端是什麼

null