Proxy handler.getPrototypeOf() 方法
關於Proxy更多內容可以參閱Proxy和Reflect一章節。
此方法可以攔截獲取原型物件操作,返回值是一個物件或者null。
語法結構:
[JavaScript] 純文字檢視 複製程式碼var p = new Proxy(obj, { getPrototypeOf(target) { //code } });
引數解析:
(1).target:可選,要被代理的目標物件。能夠被攔截的操作如下:
(1).Object.getPrototypeOf()。
(2).Reflect.getPrototypeOf()。
(3).__proto__。
(4).Object.prototype.isPrototypeOf()。
(5).instanceof。
特別說明:
(1).返回值必須是一個物件或者null,否則會報錯。
(2).如果target物件不可擴充套件,那麼此方法的返回值必須與Object.getPrototypeOf()返回值相同,否則報錯。
程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼var obj = {}; var proto = {}; var handler = { getPrototypeOf(target) { console.log(target === obj); console.log(this === handler); return proto; } }; var p = new Proxy(obj, handler); console.log(Object.getPrototypeOf(p) === proto);
上面的程式碼攔截Object.getPrototypeOf()操作。
[JavaScript] 純文字檢視 複製程式碼執行程式碼var obj = {}; var p = new Proxy(obj, { getPrototypeOf(target) { return Array.prototype; } }); console.log(p instanceof Object);
instanceof操作也會被handler.getPrototypeOf()方法攔截。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", url: "www.softwhy.com", } let p = new Proxy(antzone, { getPrototypeOf(target) { return "螞蟻部落"; } }); Object.getPrototypeOf(p);
handler.getPrototypeOf()方法的返回值必須是一個物件或者null,否則會報錯。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", url: "www.softwhy.com", } Object.preventExtensions(antzone); let p = new Proxy(antzone, { getPrototypeOf(target) { return {}; } }); Object.getPrototypeOf(p);
antzone不可擴充套件,所以handler.getPrototypeOf返回值必須和Object.getPrototypeOf返回值相同。
程式碼修改如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", url: "www.softwhy.com", } Object.setPrototypeOf(antzone, { address: "青島市南區" }); Object.preventExtensions(antzone); let p = new Proxy(antzone, { getPrototypeOf(target) { return Object.getPrototypeOf(target); } }); console.log(Object.getPrototypeOf(p));
相關文章
- Proxy handler.get() 方法
- Proxy handler.setPrototypeOf() 方法
- 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
- 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
- 代理模式(Proxy Pattern)模式
- zabbix分散式proxy分散式
- go 語言 proxy.golang.org timeout 無法訪問 處理方法Golang