為了解決各個實例對象之間的方法或屬性共享,js提供了PRototype屬性對于構造函數而言,prototype是構造函數的一個屬性,對于對象實例來說,prototype是對象實例的原型對象;所以prototype既是屬性又是原型對象;原型對象的屬性不是對象實例的屬性。對象實例的屬性是構造函數的屬性;
通過原型對象,可以在多個對象實例之間共享屬性和方法;原型鏈:
讀取對象的某個屬性時,JavaScript引擎會優先去尋找實例對象自身的屬性,如果找不到就到它的原型去找,還是找不到就到它的原型的原型去找,以此類推,直到到達最頂端的Object.prototype還是找不到則返回undefined;如果對象自身和它的原型都定義了相同名稱的屬性,那么優先讀取對象自身的屬性,類似java中的覆蓋一級級在原型鏈中尋找某個屬性對性能是有一定的影響的,如果尋找一個不存在的屬性,將會遍歷整個原型鏈;constructor屬性:constructor是prototype的一個屬性,默認指向prototype對象所在的構造函數;注意:prototype是構造函數的屬性,而constructor是prototype的屬性,constructor又指向了prototype所在的構造函數;由于constructor是定義在原型對象prototype上的,所以constructor可以被所有實例對象繼承;一個函數或方法,都有prototype屬性,prototype下面都有constructor屬性,而且constructor屬性值都指向了該函數或方法;新聞熱點
疑難解答