教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

JavaScript中怎樣借用構造函數(shù)繼承父類屬性?

更新時間:2021年12月15日11時10分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓

在ES6之前,JavaScript中并沒有extends繼承,如果要實現(xiàn)繼承的效果,可以通過構造函數(shù)和原型對象來模擬實現(xiàn)。本節(jié)將會講解如何利用構造函數(shù)和原型對象實現(xiàn)繼承。

在ES6中,繼承是通過定義兩個類,然后子類用extends關鍵字繼承父類。而在ES 6之前,只能用構造函數(shù)來代替類,在子類中利用call0方法將父類的this指向子類的this,這樣就可以實現(xiàn)子類繼承父類的屬性。為了使讀者更好地理解,下面我們通過代碼進行演示。

如果沒有,再到Son原型對象中查找,如果仍然沒有,再到Father原型對象中查找,一沿著原型鏈找到最后。由于Father原型對象中有一個money()方法,所以通過Son實例對象就繼承了money()方法。

不能直接將父類原型對象賦值給子類原型對象,這樣會導致子類無法擁有自己的方法,在子類中添加的方法同時也會添加到父類中。下面我們通過代碼演示這樣一種錯誤的用法。

function Father() {}
Father.prototype.money = function() {
    console.log(100000),
};
function Son() {}
Son.prototype = Father.prototype;   //通過這種方式無法實現(xiàn)真正的繼承
Son.prototype.exam = function() {}; //為子類增加方法的時候,會影響父類
console.log(Father.prototype.exam);    //可以看到父類也有了exam方法
真正的繼承是子類可以擁有自己的方法,并且當子類和父類的方法名相同時,子類方法可以覆蓋父類方法。


多學一招:class語法的本質(zhì)

ES 6提供了class語法用來定義類,但即使沒有class語法,在JavaScript中可以用構造函數(shù)和原型對象的語法來替代。那么,class語法定義的類和構造函數(shù)有沒有區(qū)別呢?下面我們通過代碼進行測試。

class Person {}
console.log(Person.prototype);        //類也有原型對象
Person.prototype.money = function() { //類也可以增加方法
    console.log(100000);
};
new Person().money(); //輸出結果:100000



猜你喜歡:

ES6模塊化是什么?怎樣導入和執(zhí)行模塊中的代碼?

常見的js中的繼承方法有哪些?

什么是繼承?Java中如何聲明一個類繼承另一個類?

哪些css屬性可以繼承?哪些不可以繼承?

傳智教育前端與移動開發(fā)培訓

0 分享到:
和我們在線交談!