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

2019-09-23     AiChinaTech

什麼是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。

文章來源: https://twgreatdaily.com/dwSsZG0BJleJMoPMnmsi.html