原型鏈詳解


title: 技術(shù)分享篇

Welcome

原型鏈

原型對(duì)象

在Javascript中,萬(wàn)物皆對(duì)象,但對(duì)象也有區(qū)別,大致可以分為兩類,即:普通對(duì)象 Object 和 函數(shù)對(duì)象 Function。

一般通過(guò) new Function 產(chǎn)生的對(duì)象是函數(shù)對(duì)象,其他對(duì)象都是普通對(duì)象。

所有的對(duì)象都有(proto)屬性 只有函數(shù)對(duì)象有(prototype)屬性

函數(shù)對(duì)象

    function fn(){};
    var fn1=function(){};
    console.log(typeof fn);    //function 
    console.log(typeof fn1);    //function 
    console.log(typeof Object);    //function 
    console.log(typeof Array);    //function 
    console.log(typeof Date);    //function 
    ......

原型對(duì)象其實(shí)就是構(gòu)造函數(shù)的一個(gè)實(shí)例對(duì)象,例如人對(duì)象,相當(dāng)于在person創(chuàng)建的時(shí)候,自動(dòng)創(chuàng)建了一個(gè)它的實(shí)例,并且把這個(gè)實(shí)例賦值給了prototype。

    function Person(){};  
    let temp = new Person();  
    Person.prototype = temp;  

原型鏈

原型鏈?zhǔn)菍?shí)現(xiàn)繼承的主要方法

原型鏈的思路:利用原型讓一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方法。

JS通過(guò)原型鏈實(shí)現(xiàn)繼承列子:

    //定義一個(gè) Animal 構(gòu)造函數(shù)
    function Animal(){
        this.type = 'Animal';   
    }
    //給 Animal 定義方法
    Animal.prototype.speack = function(){
        console.log(this.type);
    } 
    // 定義一個(gè) Dog 對(duì)象
    function Dog(name){
        this.name = name;
        this.type = '汪汪汪';
    }
    //改變 Dog 的 prototype 指針,指向一個(gè) Animal 實(shí)例
    Dog.prototype = new Animal();

    Dog.prototype.speak = function () {
        console.log(this.name+this.type+"叫");
    }

    var dog = new Dog('小黃');
    dog.speak();  //Animal 
    //輸出 小黃汪汪汪叫。

這就說(shuō)明,我們可以通過(guò)原型鏈的方式,實(shí)現(xiàn) Dog 繼承 Animal 的所有屬性和方法。

總結(jié)來(lái)說(shuō): Dog.prototype 指向的原型對(duì)象后,實(shí)例的內(nèi)部指針也發(fā)生了改變,指向了新的原型對(duì)象,然后就能實(shí)現(xiàn)類與類之間的繼承了。(但是如果在重寫(xiě)原型對(duì)象之前,產(chǎn)生的實(shí)例,其內(nèi)部指針指向的還是最初的原型對(duì)象。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??面向?qū)ο螅∣bject-Oriented,OO)的語(yǔ)言有一個(gè)標(biāo)志,那就是它們都有類的概念,而通過(guò)類可以創(chuàng)建任意...
    霜天曉閱讀 2,256評(píng)論 0 6
  • 第3章 基本概念 3.1 語(yǔ)法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡(jiǎn)單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,504評(píng)論 0 21
  • 博客內(nèi)容:什么是面向?qū)ο鬄槭裁匆嫦驅(qū)ο竺嫦驅(qū)ο缶幊痰奶匦院驮瓌t理解對(duì)象屬性創(chuàng)建對(duì)象繼承 什么是面向?qū)ο?面向?qū)ο?..
    _Dot912閱讀 1,534評(píng)論 3 12
  • 李鴻章對(duì)洋務(wù)的熱衷還要從他率領(lǐng)淮軍進(jìn)駐上海的時(shí)候說(shuō)起。裝備殘破的“叫花子軍”剛一進(jìn)上海,他就對(duì)西洋事物一見(jiàn)傾心。他...
    梁宵閱讀 1,383評(píng)論 2 6
  • 朋友故事 ,本人整理記錄。 題圖無(wú)關(guān) 我經(jīng)常上夜班,那時(shí)候孩子小,由于公婆住得遠(yuǎn),沒(méi)人幫忙,白天,孩子基本上都是...
    行云流水joy閱讀 382評(píng)論 9 1

友情鏈接更多精彩內(nèi)容