繼承 面試問到)

2022-05-10 14:57:19 字數 1732 閱讀 8449

原型鏈繼承

// 原型鏈繼承

function father ()

father.prototype.getname = () =>

function son ()

son.prototype.getage = () =>

son.prototype = new father()

son.prototype.getsonname = () =>

var s = new son()

s.getname()

son.prototype.__proto__.getname = () =>

s.getname()

var f = new father()

f.getname()

缺點:

父類使用this宣告的屬性(私有屬性和公有屬性)被所有例項共享,在多個例項之間對引用型別資料操作會互相影響。

建立子類例項時,無法向父類建構函式傳參

extends繼承

1

class fatch

6get () 10}

1112

class son extends fatch

17getinfo () 20}

2122 let s = new son('1','2','3')

23s.get()

24s.getinfo()

25console.log(fatch.prototype.__proto__)

26 console.log(son.prototype.__proto__)

注意:

如果子類沒有定義constructor方法,這個方法會被預設新增,**如下。也就是說,不管有沒有顯式定義,任何乙個子類都有constructor方法。

子類必須在constructor方法中呼叫super方法,否則新建例項時會報錯。這是因為子類自己的this物件,必須先通過父類的建構函式完成塑造,得到與父類同樣的例項屬性和方法,然後再對其進行加工,加上子類自己的例項屬性和方法。如果不呼叫super方法,子類就得不到this物件。

借用建構函式繼承(call)

1

function

fatch (name,age)

56 fatch.prototype.getfname = function

() 10

function

son (name,age,job)

14 son.prototype.getfname = function

() 18

var s = new son(4,5,6)

19var f = new fatch(1,2,3)

20f.getfname()

21 s.getfname()

優點:

可以向父類傳遞引數,而且解決了原型鏈繼承中:父類屬性使用this宣告的屬性會在所有例項共享的問題。

缺點:只能繼承父類通過this宣告的屬性/方法,不能繼承父類prototype上的屬性/方法。

每次子類例項化都要執行父類函式,重新宣告父類this裡所定義的方法,因此父類方法無法復用

可能問到的面試問題

寫在前面 最近總在找工作和被找工作糾纏著,由於各種因素的影響,想去的公司去不了,能去的公司不了解,我想,這到了我該做出抉擇的時刻了!生活中需要做選擇的地方太多了,要綜合各方面的因素,結合自身興趣,選擇乙個最合適的!grab every chance.1 請你自我介紹一下自己好嗎?2 你覺得你個性上最...

關於面試問到死鎖的問題

什麼是死鎖 就是在多執行緒的執行中,當乙個執行緒需要獲取到鎖時才能繼續往下執行,如果沒有立即獲取到鎖它是會進入等待狀態的。那麼假設如果執行緒1獲持有著a鎖之後它還想獲取b鎖,但是b鎖被執行緒2所持有,所以執行緒1要進入等待狀態。但是剛好執行緒2想獲取a鎖,被執行緒1所持有,那麼執行緒2也進入等待狀態...

面試反覆被問到的問題 高頻面試問題

方法1 寬度高度已知 父元素相對定位,子元素絕對定位,left 50 top 50 margin left 負的寬度一半 margin top 負的高度一板 方法二 flex布局,寬度高度已知 在父元素身上 display flex justify content center align item...