Proxy用法——讓我們創建一個API代理器

什麼是Java Proxy?

MDN對Proxy 的定義是:

Proxy對象用於定義基本操作的自定義行爲(如屬性查找、賦值、枚舉、函數調用等)。

通俗的將,Proxy對象是目標對象的一個代理器,任何對目標對象的訪問,都必須通過該代理器。因此我們可以對外界的訪問進行過濾改寫等操作。

語法

target-用Proxy包裝的目標對象(可以是任何類型的對象,包括原生數組、函數,甚至另一個代理)。

handler-一個對象,其屬性是當執行一個操作時定義代理的行爲函數。

簡單的示例

假設現在我們要訪問一個對象的屬性,如果該屬性存在,打印該屬性的值,否則報錯。在沒有Proxy對象之前,我們需要使用額外的方法來實現。如下:

上述代碼雖然可以實現預期的功能,但如果我們能把檢查屬性是否存在的邏輯放到別的地方,會讓我們更好的集中在業務邏輯代碼上。這個時候我們就可以使用Proxy,下面讓我們使用Proxy實現上面的功能。

我們給user對象添加了一個代理器,訪問任何user的屬性都會被代理器攔截,然後檢查被訪問的屬性是否存在,如果存在就返回該屬性值,否則報錯。這樣我們就可以在printUser方法中專心寫與業務邏輯相關的代碼了。

下面是另一個例子,我們在給對象屬性賦值時進行攔截操作。

API代理器

最後,我們來看一個稍微複雜一點的例子,使用Proxy封裝一個api對象,這裏爲了簡介只寫了get方法和post方法。

在handler對象中,set攔截操作可以阻止我們對api對象重新賦值,deleteProperty攔截操作可以阻止我們刪除api對象的屬性。通過get攔截操作,給api對象添加兩個方法get和post,在調用這兩個方法時會驗證請求url或者data,最後根據服務器響應返回一個Promise對象。下面是使用get方法示例:

所以,當我們想要控制對象的某些默認行爲時,就可以考慮使用Proxy。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章