JS原型和原型鏈

一、原型和原型鏈
1.1 原型概述
原型prototype是每一個函數(shù)都默認自帶的屬性,它的值是一個對象,叫做原型對象。
對于構造函數(shù)來講,意義更大。因為通過構造函數(shù)可以實例化化對象,而每一個實例化的對象,都默認含有一個隱式的屬性 __proto__ 來指向該構造函數(shù)的原型對象。
原型的作用:為實例化對象提供共享的屬性和方法。
也就是說,在內存中開辟一塊共享的空間,供構造函數(shù)的實例化對象在調用時指向這一個共享的地址,節(jié)約內存。
1.2 原型鏈概述
每一個實例化對象,都有原型對象,原型對象本質還是一個對象,所以說原型對象上面可能還有原型對象。
當一個實例化對象,去調用某個屬性或方法時,它會先從自身查找,如果找到直接調用;如果找不到則去它的原型中查找,在原型中查找到則使用;如果它的原型中也沒有找到,那么繼續(xù)向上去原型的原型中查找,就這樣一層層的查找,形成一條鏈,這條鏈我們叫做原型鏈。一直找到,原型鏈的終點是 Object 的原型,如果還是找不到則返回undefined.


prototype 屬性;允許您向對象添加屬性和方法
注:1. 這個屬性隨著函數(shù)的聲明而自動生成
????????2. 構造函數(shù)通過調用這個屬性自定義的共享屬性和方法可以被該構造函數(shù)的實例化對象調用
constructor 屬性;獲取實例化對象的構造函數(shù)

instanceof 運算符;用于判斷實例化對象的原型鏈中是否出現(xiàn)過指定的構造函數(shù)

isPrototypeOf() ?方法用于判斷原型對象和某個實例之間的關系

hasOwnProperty() ?方法判斷指定屬性是不是這個實例化對象的本地屬性
注:構造函數(shù)中定義的屬性和方法使本地屬性,隨著new的實例化對象的生成而生成,也就是對象本身具備的屬性和方法
返回值 ?是一個布爾值,本地屬性返回true ?非本地屬性返回false

in 運算符 ?判斷某個屬性可不可以被某個實例調用

in運算符還可以用于對對象屬性和數(shù)組的遍歷。

