當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
图解JavaScript原型链继承
生活随笔
收集整理的這篇文章主要介紹了
图解JavaScript原型链继承
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JavaScript是基于原型鏈的繼承的,忘掉類的繼承,從原型鏈入手。
普通對象 函數對象
- JavaScrip只有一種結構:對象
- 通過new Function()創建的對象都是函數對象,其他都是普通對象。
- 每個對象都有 __proto__屬性,,并且該屬性指向原型對象(prototype),但只有函數對象才有 prototype 屬性
prototype和 proto 的概念
prototype是函數的一個屬性(函數都有prototype屬性)指向原型對象。 _ proto_ 是一個對象擁有的內置屬性(請注意:prototype是函數的內置屬性,_ proto_ 是對象的內置屬性),_ proto_ 是JS內部使用尋找原型鏈的屬性。簡單來說,在 javascript 中每個對象都會有一個 _ proto _,方法也是對象,也有這個屬性。 屬性,當我們訪問一個對象的屬性時,如果這個對象內部不存在這個屬性,那么他就會去 _ proto _ 里找這個屬性,這個 _ proto _ 又會有自己的 _ proto _,于是就這樣一直找下去,也就是我們平時所說的原型鏈的概念.
(上圖引用自其他博客以方便理解)原型鏈
- 屬性查找機制: 當查找對象的屬性時,如果實例對象自身不存在該屬性,則沿著原型鏈往上一級查找,找到時則輸出,不存在時,則繼續沿著原型鏈往上一級查找,直至最頂級的原型對象Object.prototype,如還是沒找到,則輸出undefined。
- 屬性修改機制: 只會修改實例對象本身的屬性,如果不存在,則進行添加該屬性,如果需要修改原型的屬性時,則可以用: b.prototype.x = 2;但是這樣會造成所有繼承于該對象的實例的屬性發生改變。
總結
- Function的兩個指針prototype和_ proto _ 均指向 Function.protptype
- 構造函數通過prototype屬性獲取原型對象。
- 原型對象通過constructor屬性獲取構造函數
- 對象通過__proto__(非標準,隱式原型)屬性獲取原型對象。
- 構造函數的prototype(標準,顯式原型)屬性指向上一級原型對象直到Object原型對象。
- Object.prototype.__proto__指向null
- 所有的對象最終都繼承于Object.prototype,而所有的構造函數,包括Function(){} Object(){}在內,又都可以看做是Function的實例
- Obj.hasOwnProperty()可以判斷某個對象本身是否有某個屬性,函數也是對象。
總結
以上是生活随笔為你收集整理的图解JavaScript原型链继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android隐藏EditText长按菜
- 下一篇: gradle idea java ssm