前端面試考點之手寫系列

1、觀察者模式

觀察者模式(基于發(fā)布訂閱模式) 有觀察者,也有被觀察者。

觀察者需要放到被觀察者列表中,被觀察者的狀態(tài)變化需要通知觀察者。 內(nèi)部基于發(fā)布訂閱模式,收集觀察者;狀態(tài)變化后要主動通知觀察者。

2、發(fā)布訂閱模式

發(fā)布訂閱的核心: 每次event. emit(發(fā)布),就會觸發(fā)一次event.on(注冊)。

觀察者模式和發(fā)布訂閱模式的區(qū)別

觀察者模式和發(fā)布訂閱模式最大的區(qū)別就是發(fā)布訂閱模式有個事件調(diào)度中心,消除了發(fā)布者和訂閱者之間的依賴。

從下圖中可以看出,觀察者模式中觀察者和目標直接進行交互,而發(fā)布訂閱模式中統(tǒng)一由調(diào)度中心進行處理,訂閱者和發(fā)布者互不干擾。一方面實現(xiàn)了解耦,還有就是可以實現(xiàn)更細粒度的一些控制。比如發(fā)布者發(fā)布了很多消息,但是不想所有的訂閱者都接收到,就可以在調(diào)度中心做一些處理,類似于權(quán)限控制之類的。還可以做一些節(jié)流操作。

vue數(shù)據(jù)雙向綁定也用到了發(fā)布訂閱模式

3、事件總線

eventBus其實是一個典型的觀察訂閱模式,我們需要實現(xiàn):

1)訂閱事件on;

2)觸發(fā)事件emit;

3)移除事件off;

事件總線

4、instanceof

instanceof 運算符用于檢測構(gòu)造函數(shù)的 prototype 屬性是否出現(xiàn)在某個實例對象的原型鏈上。

所以實現(xiàn)instanceof的思路就是判斷右邊變量的原型是否存在于左邊變量的原型鏈上。

1)先取得當前類的原型,當前實例對象的原型鏈

3)一直循環(huán)(執(zhí)行原型鏈的查找機制)

a、如果 一直找到Object.prototype.__proto__ == null,Object的基類(null)上面都沒找到,則返回false;

b、如果 當前實例的原型鏈__proto__上找到了當前類的原型prototype,則返回true;

c、取得當前實例對象原型鏈的原型鏈(proto = proto.__proto__,沿著原型鏈一直向上查找)。

5、Object.create

6、call、apply和bind

1)call的實現(xiàn)

call

2)apply的實現(xiàn)

apply

2)bind的實現(xiàn)

bind

7、防抖和節(jié)流

1)防抖

防抖

2)節(jié)流

節(jié)流

8、函數(shù)柯里化


9、new

a、創(chuàng)建一個空的JavaScript對象(即{});

b、空對象的_proto_指向構(gòu)造函數(shù)的prototype,也就是將 obj.constructor 指向構(gòu)造函數(shù);

c、將this指向創(chuàng)建的對象上下文;

d、返回對象。

10、函數(shù)扁平化

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

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

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