9021年底了,突然想在這個最后一個月準備一下,試試機會,能否更進一步。所以開始準備一些基礎知識,也隨帶總結出來給各位想換工作的同學。希望大家能找到自己想要的工作。祝大家好運!
一、何為繼承
一個類獲取另一個或者多個類的屬性或者方法。繼承可以使得子類具有父類的各種方法和屬性。以免重復輸出很多代碼。
二、繼承的原理
復制父類的方法和屬性來重寫子類的原型對象。
三、原型鏈繼承
3.1 實現
function Father() { this.text = '1';}Father.prototype.someFn = function() { console.log(1);}Father.prototype.someValue = '2';function Son(){ this.text1 = 'text1';}// 函數原型指向構造函數的實例Son.prototype = new Father();
3.2 優點
1、簡單易操作。
3.3 缺點
1、父類使用this聲明的屬性被所有實例共享。原因是實例化是父類一次性賦值到子類實例的原型上,它會將父類通過this聲明的屬性也賦值到子類原型上。例如在父類中一個數組值,在子類的多個實例中,無論哪一個實例去修改這個數組的值,都會影響到其他子類實例。
2、創建子類實例時,無法向父類構造函數傳參,不夠靈活。
四、借用構造函數(call)
4.1 實現
function Father(...arr) { this.some = '父類屬性'; this.params = arr;}Father.prototype.someFn = function() { console.log(1);}Father.prototype.someValue = '2';function Son(fatherParams, ...sonParams) { // Father的this指向Son的this // 使用call調用父類,Father將會立即被執行,并且將父類的Father的this執行Son // 的this。實例化子類,this將指向new期間創建的新對象,返回該新對象。 Father.call(this, ...fatherParams); this.text = '子類屬性'; this.sonParams = sonParams;}var fatherParams = [];var sonParams = [];var sonInstance = new Son(fatherParams, ...sonParams);
4.2 優點
1、可以向父類傳遞參數。
2、解決父類this聲明的屬性會被實例共享的問題。
4.3 缺點
1、只能繼承父類通過this聲明的屬性/方法。不能繼承父類prototype上的屬性/方法。
2、父類方法無法復用。每次實例化子類,都要執行父類函數。重新聲明父類所定義的方法,無法復用。
五、組合繼承(call+new)
原理:通過原型鏈繼承來將this、prototype上的屬性和方法繼承制子類的原型對象上。使用借用構造函數來繼承父類通過this聲明的屬性和方法在之子類的實例屬性上。
5.1 實現
function Father(...arr) { this.some = '父類屬性'; this.params = arr;}Father.prototype.someFn = function() { console.log(1);}Father.prototype.someValue = '2';function Son(fatherParams, ...sonParams) { // 借用構造函數繼承父類this什么的屬性和方法到子類實例屬性上 Father.call(this, ...fatherParams); this.text = '子類屬性'; this.sonParams = sonParams;}// 原型鏈繼承,將`this`和`prototype`聲明的屬性/方法繼承至子類的`prototype`上Son.prototype = new Father('xxxxx');var fatherParams = [];var sonParams = [];var sonInstance = new Son(fatherParams, ...sonParams);
新聞熱點
疑難解答