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