理解原型和原型鏈

A Loity發表於2019-04-17

理解原型和原型鏈

建構函式、例項、原型、原型鏈

建構函式

建構函式就是一個普通的函式,建立方式和普通函式沒有區別,不同的是建構函式習慣上首字母大寫。另外就是呼叫方式的不同,普通函式是直接呼叫,而建構函式需要使用new關鍵字來呼叫。

function Person() {};
var person = new Person();
複製程式碼

例項

例項就是通過建構函式建立出來的物件。

原型

每當定義一個函式資料型別(普通函式、類)時候,都會天生自帶一個prototype屬性,這個屬性指向函式的原型物件,並且這個屬性是一個物件資料型別的值。

理解原型和原型鏈
原型與建構函式的關係就是,建構函式內部有一個名為 prototype 的屬性,通過這個屬性就能訪問到原型:

原型物件就相當於一個公共的區域,所有同一個類的例項都可以訪問到這個原型物件,我們可以將物件中共有的內容,統一設定到原型物件中。

原型鏈

指從一個例項物件開始往上找,這個例項物件的__proto__屬性所指向的則是這個例項物件的原型物件,如果用person表示這個例項,則原型物件表示為person.proto。同時,這個原型物件顧名思義也是一個物件,而且它也有上一級的原型物件,相對於上一級原型物件而言,它也是一個例項物件,那麼它也擁有__proto__屬性,它的__proto__屬性也指向它的原型物件,後面也以此類推,一直到Object.prototype這個原型為止,Object.prototype為原型鏈的末尾點。

理解原型和原型鏈
person通過呼叫兩次__proto__屬性就已經到達Object,Object是一個建構函式,Object擁有屬性prototype,可以指向它的原型。第三次呼叫的時候已經返回空,表明Object.prototype為原型鏈的末端。

理解原型和原型鏈

Person是建構函式, Person.prototype 是原型物件, person是例項, 例項可以通過_proto_找到原型物件。

Example

function A() {}
A.prototype.type = 'AAA'

function B() {}
B.prototype = new A()

b = new B()
console.log(b.__proto__.__proto__.type) //AAA
console.log(B.prototype.__proto__ == b.__proto__.__proto__) //true
console.log(A.prototype == b.__proto__.__proto__) //true
console.log(A.prototype == B.prototype.__proto__) //true
console.log(b.__proto__.__proto__.type == A.prototype.type) //true
    
複製程式碼

理解原型和原型鏈

如果感覺對你有幫助,那就收藏❤❤吧!

相關文章