Proxy handler.getOwnPropertyDescriptor() 方法
關於Proxy更多內容可以參閱Proxy和Reflect一章節。
此方法能夠攔截Object.getOwnPropertyDescriptor()操作。
返回值是物件或者undefined。
語法結構:
[JavaScript] 純文字檢視 複製程式碼var p = new Proxy(target, { getOwnPropertyDescriptor: function (target, prop) { //code } })
引數解析:
(1).target:可選,被代理的目標物件。
(2).prop:可選,要獲取特性描述的屬性名稱。
特別說明:
(1).如果返回值不是物件或者undefined會報錯。
(2).如果target物件自有屬性是不可配置,那麼返回值不能是undefined,否則會報錯。
(3).如果target物件是不可擴充套件的,那麼返回值不能是undefined,否則會報錯。
(4).如果物件是不可擴充套件且指定屬性不是物件自有,那麼返回值必須是undefined,否則會報錯。
(5).如果屬性不是物件的自有屬性,或者此屬性是物件可配置自有屬性,那麼返回屬性描述物件configurable屬性值必須為true,否則報錯。
程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", url:"www.softwhy.com" } var p = new Proxy(antzone, { getOwnPropertyDescriptor: function(target, prop) { console.log(prop); return { configurable: true, enumerable: true, value: "antzone" }; } }); Object.getOwnPropertyDescriptor(p, "webName");
上面程式碼可以攔截Object.getOwnPropertyDescriptor()操作,返回一個自定義的屬性特性描述物件。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", url:"www.softwhy.com" } var p = new Proxy(antzone, { getOwnPropertyDescriptor: function(target, prop) { console.log(prop); return { configurable: true, enumerable: true, value: "antzone" }; } }); Reflect.getOwnPropertyDescriptor(p, "webName");
上面程式碼攔截Reflect.getOwnPropertyDescriptor()操作,返回返回一個自定義的屬性特性描述物件。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", url:"www.softwhy.com" } Object.defineProperty(antzone, "webName", { writable: true, enumerable: true, configurable: false }) var p = new Proxy(antzone, { getOwnPropertyDescriptor: function(target, prop) { console.log(prop); return undefined; } }); Reflect.getOwnPropertyDescriptor(p, "webName");
程式碼會報錯,因為antzone的webName屬性是不可擴充套件的。
而handler.getOwnPropertyDescriptor()返回值是undefined。
相關文章
- Proxy.revocable() 方法
- Proxy handler.has() 方法
- Proxy handler.get() 方法
- Proxy handler.deleteProperty() 方法delete
- Proxy handler.apply() 方法APP
- Proxy handler.setPrototypeOf() 方法
- Proxy handler.defineProperty() 方法
- Proxy handler.getPrototypeOf() 方法
- Proxy handler.set() 方法
- Proxy handler.ownKeys() 方法
- Proxy handler.isExtensible() 方法
- Proxy handler.preventExtensions() 方法
- Proxy handler.construct() 方法Struct
- 淺談jQuery中$.proxy()工具方法jQuery
- Proxy代理資料攔截方法
- Many To Many could not initialize proxy – no Session的解決方法Session
- 使用 `open-uri.with_proxy` 方法開啟網頁網頁
- Proxy
- docker – nginx – proxy_pass + proxy_redirectDockerNginx
- ShardingSphere-Proxy 前端協議問題排查方法及案例前端協議
- Proxy invocationHandler
- Proxy模式模式
- proxy 收集
- Proxy 攔截
- Proxy介紹
- 代理模式(Proxy)模式
- 2.1.2.3 Proxy PDBs
- 初識Proxy
- JavaScript 之 ProxyJavaScript
- go 語言 proxy.golang.org timeout 無法訪問 處理方法Golang
- 代理(Proxy)的解析
- Cglib proxy探祕CGLib
- 代理模式(Proxy Pattern)模式
- Proxy使用詳解
- 安卓 no_proxy安卓
- zabbix分散式proxy分散式
- Proxy例項set()
- What are the benefits of using an proxy?