Proxy用法——讓咱們建立一個API代理器

什麼是Java Proxy?api

MDN對Proxy 的定義是:數組

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

通俗的將,Proxy對象是目標對象的一個代理器,任何對目標對象的訪問,都必須經過該代理器。所以咱們能夠對外界的訪問進行過濾改寫等操做。函數

語法
圖片描述
target-用Proxy包裝的目標對象(能夠是任何類型的對象,包括原生數組、函數,甚至另外一個代理)。post

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

簡單的示例spa

假設如今咱們要訪問一個對象的屬性,若是該屬性存在,打印該屬性的值,不然報錯。在沒有Proxy對象以前,咱們須要使用額外的方法來實現。以下:3d

圖片描述

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

圖片描述

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

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

圖片描述

API代理器

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

圖片描述

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

圖片描述

因此,當咱們想要控制對象的某些默認行爲時,就能夠考慮使用Proxy。

相關文章
相關標籤/搜索