1. 程式人生 > 實用技巧 >原型和原型鏈

原型和原型鏈

什麼是原型?

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

function Person() {} var person = new Person()

console.log(person.__proto__ === Person.prototype)//true

console.log(Person.prototype.constructor===Person)//true

//順便學習一個ES5的方法,可以獲得物件的原型

console.log(Object.getPrototypeOf(person) === Person.prototype) // true

何為原型鏈?

在JavaScript中萬物都是物件,物件和物件之間也有關係,並不是孤立存在的。物件之間的繼承關係, 在JavaScript中是通過prototype物件指向父類物件,直到指向Object物件為止,這樣就形成了一個原型指向的鏈條,專業術語稱之為原型鏈 當我們訪問物件的一個屬性或方法時,它會先在物件自身中尋找,如果有則直接使用,如果沒有則會去原型物件中尋找,如果找到則直接使用。如果沒有則去原型的原型中尋找,直到找到Object物件的原型,Object物件的原型沒有原型,如果在Object原型中依然沒有找到,則返回undefined。 function Person() {} Person.prototype.a = 123;
Person.prototype.sayHello = function () { alert("hello"); }; var person = new Person() console.log(person.a)//123 console.log(person.hasOwnProperty('a'));//false console.log('a'in person)//true