Proxy 攔截
Proxy 用於修改某些操作的預設行為,等同於在語言層面做出修改,所以屬於一種“超程式設計”(meta programming),即對程式語言進行程式設計。
Proxy 可以理解成,在目標物件之前架設一層“攔截”,外界對該物件的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾和改寫。Proxy 這個詞的原意是代理,用在這裡表示由它來“代理”某些操作,可以譯為“代理器”。
ES6 原生提供 Proxy 建構函式,用來生成 Proxy 例項。
let n1=new Proxy(target,handler); target參數列示所要攔截的目標物件;handler引數也是一個物件,用來定製攔截行為;
攔截讀取屬性的例子:
![8934731-c32719aef49ec2ac.png](https://i.iter01.com/images/e0f6bdcdd681057f65953496e0d76442285e81103922513cceaaf4fc33695876.webp)
上面程式碼中,作為建構函式,Proxy接受兩個引數。第一個引數是所要代理的目標物件(上例是一個空物件),即如果沒有Proxy的介入,操作原來要訪問的就是這個物件;第二個引數是一個配置物件,對於每一個被代理的操作,需要提供一個對應的處理函式,該函式將攔截對應的操作。比如,上面程式碼中,配置物件有一個get方法,用來攔截對目標物件屬性的訪問請求。get方法的兩個引數分別是目標物件和所要訪問的屬性。可以看到,由於攔截函式總是返回"hello,world",所以訪問任何屬性都得到‘hello,world’。
如果handler沒有設定任何攔截,那就等同於直接通向原物件
![8934731-7ad6776ed37cc5e0.png](https://i.iter01.com/images/58d1b11599ca4ccd27316a2e242b51a5fd7e9312a591d9aad0c052ef8dea9803.webp)
如果handler沒有設定任何攔截,那就等同於直接通向原物件
一個技巧是將 Proxy 物件,設定到object.proxy屬性,從而可以在object物件上呼叫。
![8934731-7b5cf099d91cee60.png](https://i.iter01.com/images/d88a9848a4f4a29f7a7ac47967119022d229f309233d36dba15b63bf059126f8.webp)
![8934731-f1106e5e0d258b9d.png](https://i.iter01.com/images/5523f1ccf0913b11180a84a6039cc569577f4d4bcd64ede3716ab4f4e428bcf2.webp)
更多關於Proxy例項的詳細用法請參考阮一峰老師的網站
關於Proxy基本使用的一個簡單demo:
![8934731-8aa612f8450931d7.png](https://i.iter01.com/images/3abbe87548fc5bcb6fcde1a1722cbb1f4d08153ef238ec31f93a243abea29cc6.webp)
關於Proxy物件的一個demo演示
可以利用Proxy給一個物件的屬性 變成私有屬性 不能通過 物件.屬性名來訪問:
![8934731-9d525c396a49e7f6.png](https://i.iter01.com/images/e867dfe0553f1bac16bab1815040b56745658694e8120dcbf7eed7679faca617.webp)
這個例子中,將person的id變成了私有屬性,一旦訪問person.id就在get裡攔截丟擲一個錯誤
相關文章
- Proxy代理資料攔截方法
- ES6 Proxy攔截器詳解
- SpringMVC攔截器,設定不攔截的URLSpringMVC
- 前端架構之vue+axios 前端實現登入攔截(路由攔截、http攔截)前端架構VueiOS路由HTTP
- Spring MVC 中的攔截器的使用“攔截器基本配置” 和 “攔截器高階配置”SpringMVC
- SpringMVC攔截器SpringMVC
- axios 攔截器iOS
- spring攔截器Spring
- axios攔截器iOS
- sql攔截器SQL
- 導彈攔截
- Mybatis 攔截器MyBatis
- MyBatis攔截器MyBatis
- win10 microsoft edge網址被攔截如何取消攔截Win10ROS
- Xposed攔截抽象方法抽象
- Mybatis Interceptor 攔截器MyBatis
- WKCrashSDK - crash攔截工具
- spring boot 攔截器Spring Boot
- SpringMVC-攔截器SpringMVC
- gRPC(3):攔截器RPC
- 【SpringMVC】 4.3 攔截器SpringMVC
- SpringBoot攔截器中獲取註解、攔截器中注入ServiceSpring Boot
- Asp.Netcore使用Filter來實現介面的全域性異常攔截,以及前置攔截和後置攔截ASP.NETNetCoreFilter
- Flume內建攔截器與自定義攔截器(程式碼實戰)
- 2.攔截WebView事件WebView事件
- Spring Boot新增攔截器Spring Boot
- SpringBoot 手寫攔截器Spring Boot
- HandlerInterceptor - 自定義攔截器
- 攔截過濾器模式過濾器模式
- mybatis註冊攔截器MyBatis
- 16、threadlocal+攔截器thread
- SpringMVC中的攔截器SpringMVC
- grpc中的攔截器RPC
- 短視訊直播系統,軟體自帶的攔截器,攔截功能
- Springboot通過攔截器攔截請求資訊收集到日誌Spring Boot
- spring mvc攔截器,spring攔截器以及AOP切面的區別和原始碼SpringMVC原始碼
- 從程式設計攔截器到大腦資訊攔截處理架構程式設計架構
- 微信域名攔截檢測