溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何體現(xiàn)js繼承關(guān)系

發(fā)布時間:2020-09-24 14:36:19 來源:億速云 閱讀:165 作者:小新 欄目:web開發(fā)

小編給大家分享一下如何體現(xiàn)js繼承關(guān)系,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

JS作為面向?qū)ο蟮娜躅愋驼Z言,繼承也是其非常強大的特性之一。那么如何在JS中實現(xiàn)繼承呢?讓我們拭目以待。

js里常用的如下兩種繼承方式:

原型鏈繼承(對象間的繼承)

類式繼承(構(gòu)造函數(shù)間的繼承)

由于js不像java那樣是真正面向?qū)ο蟮恼Z言,js是基于對象的,它沒有類的概念。所以,要想實現(xiàn)繼承,可以用js的原型prototype機制或者用apply和call方法去實現(xiàn)

在面向?qū)ο蟮恼Z言中,我們使用類來創(chuàng)建一個自定義對象。然而js中所有事物都是對象,那么用什么辦法來創(chuàng)建自定義對象呢?這就需要用到js的原型:

我們可以簡單的把prototype看做是一個模版,新創(chuàng)建的自定義對象都是這個模版(prototype)的一個拷貝 (實際上不是拷貝而是鏈接,只不過這種鏈接是不可見,新實例化的對象內(nèi)部有一個看不見的__Proto__指針,指向原型對象)。

js可以通過構(gòu)造函數(shù)和原型的方式模擬實現(xiàn)類的功能。 另外,js類式繼承的實現(xiàn)也是依靠原型鏈來實現(xiàn)的。

原型式繼承與類式繼承

類式繼承是在子類型構(gòu)造函數(shù)的內(nèi)部調(diào)用超類型的構(gòu)造函數(shù)。

嚴格的類式繼承并不是很常見,一般都是組合著用:

function Super(){
    this.colors=["red","blue"];
}
 
function Sub(){
    Super.call(this);
}

原型式繼承是借助已有的對象創(chuàng)建新的對象,將子類的原型指向父類,就相當于加入了父類這條原型鏈

原型鏈繼承

為了讓子類繼承父類的屬性(也包括方法),首先需要定義一個構(gòu)造函數(shù)。然后,將父類的新實例賦值給構(gòu)造函數(shù)的原型。代碼如下:

<script>
    function Parent(){
        this.name = 'mike';
    }
 
    function Child(){
        this.age = 12;
    }
    Child.prototype = new Parent();//Child繼承Parent,通過原型,形成鏈條
 
    var test = new Child();
    alert(test.age);
    alert(test.name);//得到被繼承的屬性
    //繼續(xù)原型鏈繼承
    function Brother(){   //brother構(gòu)造
        this.weight = 60;
    }
    Brother.prototype = new Child();//繼續(xù)原型鏈繼承
    var brother = new Brother();
    alert(brother.name);//繼承了Parent和Child,彈出mike
    alert(brother.age);//彈出12
</script>

以上原型鏈繼承還缺少一環(huán),那就是Object,所有的構(gòu)造函數(shù)都繼承自Object。而繼承Object是自動完成的,并不需要我們自己手動繼承,那么他們的從屬關(guān)系是怎樣的呢?

確定原型和實例的關(guān)系

可以通過兩種方式來確定原型和實例之間的關(guān)系。操作符instanceof和isPrototypeof()方法:

alert(brother instanceof Object)//true
alert(test instanceof Brother);//false,test 是brother的超類
alert(brother instanceof Child);//true
alert(brother instanceof Parent);//true

只要是原型鏈中出現(xiàn)過的原型,都可以說是該原型鏈派生的實例的原型,因此,isPrototypeof()方法也會返回true。

看完了這篇文章,相信你對如何體現(xiàn)js繼承關(guān)系有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI