建構函式、例項、和原型物件的關係
每次建立js函式時,js都會為函式物件預設新增乙個稱為prototype的額外屬性,它指向原型物件,可以用來訪問原型物件。
然後當我們從function 物件中建立例項的時候,js引擎會再次向該物件的例項新增_ _proto_ _ 屬性。它也可以用於訪問function 物件的同一原型物件。
建構函式(function物件)的原型物件在所有使用該函式建立的例項物件中共享,將方法和屬性新增到此原型物件,這些方法和屬性將自動用於其建構函式的例項。(在建構函式例項中的__proto__屬性中)
prototype屬性是乙個預設情況下"擁有constructor屬性的物件"(也就是原型物件)
也可以說函式物件的prototype屬性指向的就是原型物件
原型鏈的定義和繼承物件的原型,也是個物件。只要物件的原型有值,不為null,他就還有原型。所以構成了原型鏈。prototype
指向原型物件(顯示原型) constructor指向擁有指向它prototype屬性的函式物件…例項的原型屬性__ proto__
(隱式原型)和函式function的prototype屬性指向同一物件(原型物件)。
另一種詳細理解 : 假如有乙個建構函式,然後建立了該建構函式的例項,那麼這個被建立出來的函式就會繼承建構函式的屬性,假如例項的某個屬性並未在自身函式內找到,那麼它就會往上查詢,直到查詢到prototype指向null時停止,並返回未宣告錯誤,那麼在這個查詢的過程層層向上查詢的關係就叫做原型鏈。
總結來說就是:每個被建立的物件都將從其原型鏈上繼承它所尋找到的方法和屬性。
可以往原型鏈上新增屬性和方法 ,從而手寫原型鏈繼承。
拓展:當乙個例項呼叫某個方法時,它先去自己所屬型別的原型鏈上依次去尋找對應方法,最後才去object的原型物件
原型 和 原型鏈
每乙個js物件 null除外 都和另乙個物件相關聯。另乙個 物件就是我們熟知的原型,每乙個物件都從原型繼承屬性。所有通過物件直接量建立的物件都具有同乙個原型物件,並可以通過js object.prototype 獲得對原型物件的引用。通過關鍵字new和構造函式呼叫建立的物件的原型就是建構函式的 pr...
原型和原型鏈
原型鏈 例項物件與原型之間的連線,叫做原型鏈 function human human.prototype.age 22 var a new human console.log a.age 這裡的age掛載到了human的原型上面了。其實原型就是乙個物件。a為什麼能找到原型上面的物件呢?這裡例項物件...
原型和原型鏈
建構函式 function foo name age function 其實是 var a new object 的語法糖 var a 其實是 var a new array 的語法糖 function foo 其實是 var foo new function 的語法糖 new乙個物件的過程 建立乙...