Proxy handler.get() 方法
關於Proxy更多內容可以參閱Proxy和Reflect一章節。
此方法會攔截屬性的讀取操作;可以返回任意型別的值。
語法結構:
[JavaScript] 純文字檢視 複製程式碼var p = new Proxy(target, { get: function (target, property, receiver) { //code } });
引數解析:
(1).target:可選,被代理的目標物件。
(2).property:可選,要讀取的屬性名稱。
(3).receiver:可選,如果屬性部署了getter訪問器,那麼此訪問器的this指向receiver。
特別說明:
(1).如果對應的target物件的資料屬性是不可配置,且不可寫,返回值必須就是target物件上此屬性的值,否則報錯。
(2).如果對應的target物件的訪問器屬性是不可配置,且不存在get放棄,返回值必須是undefined,否則報錯。
程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", url:"www.softwhy.com" } var p = new Proxy(antzone, { get: function (target, prop, receiver) { console.log(prop); return "antzone"; } }); console.log(p.webName);
在上面的程式碼中,獲取屬性值的操作會被攔截。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", url:"www.softwhy.com" } var p = new Proxy(antzone, { get: function (target, prop, receiver) { console.log(prop); return "antzone"; } }); console.log(Reflect.get(p,"webName"));
使用Reflect.get()方式獲取屬性值也會被handler.get()方法攔截。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let obj = { num: 4 } let antzone = { webName: "螞蟻部落", url: "www.softwhy.com", get age() { return this.num; } } var p = new Proxy(antzone, { get: function (target, prop, receiver) { console.log(prop); console.log(receiver); return Reflect.get(target, "age", receiver) } }); console.log(Reflect.get(p, "age", obj));
上面的程式碼演示了handler.get()方法的第三個引數。
關於Reflect.get()用法可以參閱Reflect.get()方法一章節。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", url:"www.softwhy.com" } Object.defineProperty(antzone, "webName", { writable: false, enumerable: true, configurable: false }); var p = new Proxy(antzone, { get: function (target, prop, receiver) { console.log(prop); return "antzone"; } }); console.log(Reflect.get(p,"webName"));
上面的程式碼會報錯,因為webName屬性是不可配置且不可寫的。
[JavaScript] 純文字檢視 複製程式碼執行程式碼var _webName = "螞蟻部落"; var antzone = { url: "www.softwhy.com", set webName(val) { _webName = val } } Object.defineProperty(antzone, "webName", { enumerable: true, configurable: false }); var p = new Proxy(antzone, { get: function (target, prop, receiver) { console.log(prop); return "螞蟻部落"; } }); console.log(Reflect.get(p,"webName"));
上面的程式碼會報錯,因為target物件不存在get訪問器,且訪問器屬性是不可配置的。
相關文章
- Proxy handler.setPrototypeOf() 方法
- Proxy handler.getPrototypeOf() 方法
- Proxy handler.deleteProperty() 方法delete
- Proxy handler.getOwnPropertyDescriptor() 方法
- Proxy handler.construct() 方法Struct
- Proxy handler.apply() 方法APP
- 淺談jQuery中$.proxy()工具方法jQuery
- Proxy代理資料攔截方法
- 前端跨域方法之proxy(代理)前端跨域
- 使用 `open-uri.with_proxy` 方法開啟網頁網頁
- Many To Many could not initialize proxy – no Session的解決方法Session
- Proxy
- 通過代理抓取網頁code方法 proxy httpurlconnection網頁HTTP
- docker – nginx – proxy_pass + proxy_redirectDockerNginx
- nginx proxy_pass 和 proxy_redirectNginx
- Proxy模式模式
- MySQL ProxyMySql
- proxy 收集
- ShardingSphere-Proxy 前端協議問題排查方法及案例前端協議
- 使用Proxy.newProxyInstance包裝物件池,免去returnObject方法呼叫物件Object
- 代理模式(Proxy)模式
- JavaScript 之 ProxyJavaScript
- 配置proxy代理
- jQuery.proxy()jQuery
- http proxy原理HTTP
- 安卓 no_proxy安卓
- MySQL Proxy應用入門(1)--安裝MySQL ProxyMySql
- Nginx伺服器的反向代理proxy_pass配置方法講解Nginx伺服器
- MySQL Proxy應用入門(2)--MySQL Proxy配置選項MySql
- 代理(Proxy)的解析
- Proxy使用詳解
- 4.1.1Proxy元件元件
- MySQL Proxy的用途MySql
- Rpc Call ProxyRPC
- mysql proxy安裝MySql
- could not initialize proxy - no SessionSession
- zabbix分散式proxy分散式
- 代理模式(Proxy Pattern)模式