最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript原型鏈詳解

 更新時間:2026年04月28日 09:24:32   作者:W.A委員會  
文章詳細解釋了構造函數(shù)、原型對象、實例之間的關系,以及如何通過原型鏈繼承屬性和方法,指出了構造函數(shù)本身也是對象,具有原型和構造函數(shù)屬性,重點在于理解構造函數(shù)如何影響實例和原型鏈的構建,以及在不同操作中如何正確地修改和訪問這些屬性

例子:

function Person(name,walk){
    this.name=name
    this.walk=walk
    this.getName=function(){
        console.log(this.name)
    }
}
Person.eat=function(){console.log('eat')}
Person.prototype.getWalk=function(){console.log(this.walk)}
const person=new Person('張三','順拐')

constructor

  • 當我們找實例的constructor的時候他自己本身是沒有的,所以會沿著原型鏈往上找,而他原型鏈的上一級是他構造函數(shù)的prototype,這個有constructor,所以會被實例繼承,而這個constructor指向構造函數(shù)本身,即person無constructor,他繼承Person.prototype的constructor,而Person.prototype.constructor=Person,所以person.construtor=Person
  • 構造函數(shù)本身也是一個對象,他作為對象的行為和實例也一樣,即Person作為對象的行為和person是一樣的,所以他也會繼承他的構造函數(shù)的prototype的constructor,而所有的函數(shù)作為對象時的構造函數(shù)均是Function,所以Person.constructor=Function.prototype.constructor=Function

prototype(原型對象)與__proto__(對象原型,下面簡稱原型)

函數(shù)有一個對象屬性是prototype(只有函數(shù)有,普通對象是沒有的),注意箭頭函數(shù)沒有prototype,構造函數(shù)也是函數(shù)所以也有prototype,這個屬性定義了構造函數(shù)制造出來的對象的公共祖先,通過該構造函數(shù)產生的對象可以繼承該原型的屬性和函數(shù),即person可以繼承Person.prototype上的函數(shù)

實例的原型都指向他的構造函數(shù)的原型對象,即person的原型指向Person.prototype

所有的函數(shù)(包括箭頭函數(shù),箭頭函數(shù)只是沒有prototype而已,也就是不能構造實例)的構造函數(shù)都是Function,即所有的函數(shù)都是Function的實例,包括Object,因為Object本身也是構造函數(shù),可以拿來構造對象,所以任何函數(shù)的原型都指向Function.prototype,所以Object的原型也指向Function.prototype,而Function是一個構造函數(shù),所以Function自己也是由Function.prototype構造的,即Function本身的原型也指向Function.prototype

普通對象是Object的實例,即由Object構造的所以Object是普通對象的構造函數(shù),所以普通對象的原型為Object,注意,構造函數(shù)是函數(shù),但是構造函數(shù)的prototype本身是一個非函數(shù)對象,即Person.prototype和Function.prototype的原型都指向Object.prototype

而Object.prototype理論上來說也是對象那也應該由Object.prototype構造,但是為了避免循環(huán)所以Object.prototype指向null

參考3,4可知原型鏈即對象的原型,原型的原型…,比如person的原型鏈為person=>Person.prototype=>Object.prototype=>null,并且要理解Person的原型鏈是Person=>Function.prototype=>Object.prototype=>null,Function的原型鏈是Function=>Function.prototype=>Object.prototype

注意,在構造函數(shù)中寫this.屬性那構造函數(shù)不會有這個屬性,因為這本質上是一條語句而不是屬性,this是指向調用方的,所以實例中會有這個屬性,比如

function Person(){
    this.name=15
}
const p=new Person()
console.log(p.name)//15
console.log(Person.name)//undefined
Person.prototype.name=20
console.log(p.name)//15,因為原型鏈從底往上找的

一般像這種固定值的屬性沒必要放在Person中用this給實例定義,因為這樣一來每個實例都會創(chuàng)建一個,不如直接放在原型上即Person.prototype.name=15這樣如何Person里不再定義this.name

如果修改Person.prototype的引用即Person.prototype={}有兩種情況,若實例是在修改前定義的那實例將無法連接到新的Person.prototype上,因為他已經連接到舊的上了,如果在修改后定義那就連接在新的上面,注意Person能否連接到新的上面取決于新的引用是否將constructor指回Person,永遠記得Person.prototype也只是一個對象,他和Person的連接是通過上面的constructor對象屬性指向Person完成的,新對象如果直接沒定義constructor或者定義成別的那也連接不上Person

通過實例是無法修改構造函數(shù)原型上的屬性的,比如如果person.name='李四’那這個是給perosn實例這個對象上添加了一個叫name的屬性而不是Person.prototype.name被修改了; delete person.name只能刪除person自己的name屬性不會刪除Person.prototype的name屬性,但是注意即使person上沒name這個也會返回true,這不代表Person.prototype的name屬性被刪除了,而是執(zhí)行刪除沒找到要刪除的也算刪除成功 ;

到此這篇關于JavaScript原型鏈詳解的文章就介紹到這了,更多相關js原型鏈內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在Postman的腳本中如何使用pm對象獲取接口的請求參數(shù)

    在Postman的腳本中如何使用pm對象獲取接口的請求參數(shù)

    這篇文章主要介紹了在Postman的腳本中如何使用pm對象獲取接口的請求參數(shù),本文通過實例代碼圖文相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • js實現(xiàn)分割上傳大文件

    js實現(xiàn)分割上傳大文件

    這篇文章主要為大家詳細介紹了js實現(xiàn)分割上傳大文件的相關資料,需要的朋友可以參考下
    2016-03-03
  • javascript搜索自動提示功能的實現(xiàn)

    javascript搜索自動提示功能的實現(xiàn)

    使用 jQuery(Ajax)/PHP/MySQL實現(xiàn)自動完成功我覺得我有必要寫這個教程,因為曾經見到的大部分關于自動完成的應用程序都只是給你一個程序源碼包,然后告訴你怎么使用,而不是告訴你它是如何工作的以及為什么這樣做。
    2008-06-06
  • JS數(shù)組添加或刪除元素的三種方式示例詳解

    JS數(shù)組添加或刪除元素的三種方式示例詳解

    本文介紹了JavaScript中三種常見的數(shù)組操作方法,push()、unshift()和splice(),通過具體實例展示了如何利用這些方法在數(shù)組的不同位置添加元素,以及如何使用splice()進行元素的刪除,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Javascript中async與await的捕捉錯誤詳解

    Javascript中async與await的捕捉錯誤詳解

    這篇文章主要為大家詳細介紹了Javascript中async與await的捕捉錯誤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 實用框架(iframe)操作代碼

    實用框架(iframe)操作代碼

    這篇文章主要介紹了實用框架(iframe)操作代碼 ,需要的朋友可以參考下
    2014-10-10
  • js實現(xiàn)省份下拉菜單效果

    js實現(xiàn)省份下拉菜單效果

    這篇文章主要為大家詳細介紹了js實現(xiàn)省份下拉菜單效果的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • JS 日期與時間戮相互轉化的簡單實例

    JS 日期與時間戮相互轉化的簡單實例

    下面小編就為大家?guī)硪黄狫S 日期與時間戮相互轉化的簡單實例。小編覺得挺不錯的, 現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 手把手教你uniapp和小程序分包(圖文)

    手把手教你uniapp和小程序分包(圖文)

    本文主要介紹了手把手教你uniapp和小程序分包,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • js中延遲加載和預加載的具體使用

    js中延遲加載和預加載的具體使用

    這篇文章主要介紹了js中延遲加載和預加載的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01

最新評論

广德县| 隆林| 福建省| 恩平市| 台东县| 常德市| 北辰区| 墨玉县| 错那县| 建昌县| 靖边县| 新宁县| 安福县| 金坛市| 泾川县| 商洛市| 乐山市| 荔浦县| 平度市| 宣恩县| 普定县| 海阳市| 巴林右旗| 务川| 汉寿县| 河曲县| 城口县| 波密县| 定陶县| 黄骅市| 大竹县| 沿河| 普安县| 平顺县| 瑞金市| 启东市| 东源县| 香格里拉县| 桦南县| 嘉黎县| 梅河口市|