国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JavaScript 的代理對象

開發(fā) 前端
JavaScript 支持 setters 和 getters 已經(jīng)很長時間了。他們用帶有 set 和 get 關鍵字的簡單語法來攔截對象的屬性訪問和值的修改操作。

JavaScript 支持 setters 和 getters 已經(jīng)很長時間了。他們用帶有 set 和 get 關鍵字的簡單語法來攔截對象的屬性訪問和值的修改操作。

  1. const obj = { 
  2.   propValue: 1, 
  3.   get prop() { 
  4.     console.log("Retrieving property prop"); 
  5.     return this.propValue; 
  6.   }, 
  7.   set prop(value) { 
  8.     console.log("Setting property prop to", value); 
  9.     this.propValue = value
  10.   } 
  11. }; 
  12.  
  13. obj.prop; // 1 | [in console] Retrieving  property prop 
  14. obj.prop = 2; // [in console] Setting property prop to 2 
  15.  
  16. 1234567891011121314 

但是,setter/getter 有多個缺點:

  • 它們僅限 get 和 get 操作(顯然)。
  • 它們不能與相同鍵(即“常規(guī)”屬性)的數(shù)據(jù)入口一起使用。
  • 它們不是動態(tài)的,必須在對象聲明期間用靜態(tài)的 Object.defineProperty() 方法或通過使用計算值(僅適用于新的瀏覽器)顯式地應用于每個屬性。
  1. // ... 
  2. Object.defineProperty(obj, "anotherProp", { 
  3.   get() { 
  4.     /* Do something on get */ 
  5.   }, 
  6.   set(value) { 
  7.     /*Do something on set */ 
  8.   } 
  9. }); 
  10.  
  11. 123456789 

因此,setter 和 getter 不太適合觀察整個對象或執(zhí)行非常簡單的操作。因此,ECMAScript 6(ES6)引入了代理對象(Proxy object)。

代理(Proxy)

代理是內(nèi)置的 JS 對象,可用于攔截和更改與對象相關的不同操作的行為。

  1. const originalObj = { prop: 1, anotherProp: "value" }; 
  2. const proxyObj = new Proxy(originalObj, { 
  3.   get(obj, prop) { 
  4.     console.log("Retrieving property", prop); 
  5.     return obj[prop]; 
  6.   }, 
  7.   set(obj, prop, value) { 
  8.     console.log("Setting property", prop, "to", value); 
  9.     obj[prop] = value; 
  10.     return true; 
  11.   } 
  12. }); 
  13. originalObj.prop; // 1 
  14. originalObj.prop = 2
  15.  
  16. proxyObj.prop; // 2 | [in console] Retrieving property "prop" 
  17. proxyObj.anotherProp = "new value"; // [in console] Setting property "anotherProp" to "new value" 
  18.  
  19. 1234567891011121314151617 

很快我們就可以看到 Proxy 與 setter 和 getters 之間的區(qū)別。它們不僅在語法上有所不同(Proxy 更為冗長),而且在與原始對象的交互方面也有所不同。Proxy會創(chuàng)建一個新對象供你與之交互,而不是與原始對象進行交互,原始對象在使用 setter/getter 時會直接修改。

在使用 Proxy 的情況下,原始對象(也稱為 target)用作一種存儲。你對其執(zhí)行的任何操作都會直接影響代理,但不會觸發(fā)其任何 trap。

代理的 trap 是執(zhí)行特定操作時調(diào)用的簡單方法。它們都是在單個 handler 對象上定義的,然后傳遞給 Proxy 構造函數(shù)。除此之外,它們不僅限于 set() 和 get(),還包括一些有趣的操作,你可以在 MDN 文檔中找到。

可撤銷代理

如果出于某種原因,你以后想取消或撤消代理,則應該用靜態(tài)的 Proxy.revocable()方法創(chuàng)建它。

  1. // ... 
  2. const revocableProxyObj = Proxy.revocable(originalObj, { 
  3.   get(obj, prop) { 
  4.     /* Do something on get */ 
  5.   }, 
  6.   set(obj, prop, value) { 
  7.     /*Do something on set */ 
  8.   } 
  9. }); 
  10. const proxy = revocableProxyObj.proxy; 
  11. proxy.prop; // OK 
  12. revocable.revoke(); 
  13. proxy.prop // TypeError 
  14.  
  15. 12345678910111213 

該方法不是直接返回 Proxy 對象,而是返回一個對象,該對象包含位于 proxy 屬性下的實際 Proxy 和一個附加的 revoke() 方法。

調(diào)用時,此方法會使 Proxy 無效,使以后的任何調(diào)用均以 TypeError 結尾。之后該代理將被自動“垃圾收集”,從而釋放內(nèi)存空間。

用例

與 setter/getter 相比,Proxy 可以讓你做更多的事情。它們更快(聲明后)并且更加靈活,使其成為狀態(tài)管理等用例的理想解決方案。

Proxy 帶來了很多可定制性,使開發(fā)人員可以控制 JS 的某些元功能(meta-functionalities)。所以它們并不是向后兼容的,并且沒有任何完全兼容的 polyfill 的選項存在。話雖如此,根據(jù) Can I use... 的數(shù)據(jù),總體的支持看上去不錯,覆蓋率約為 93%(不支持 IE 和 Safari <10 的版本)。

責任編輯:趙寧寧 來源: 前端先鋒
相關推薦

2021-07-27 22:56:00

JavaScript編程開發(fā)

2009-01-19 09:40:53

JavaScript事件代理事件處理器

2021-04-07 10:12:05

Javascript對象拷貝開發(fā)

2016-09-14 21:28:25

JavaScript事件代理委托

2021-10-21 18:47:37

JavaScript面向對象

2012-02-29 09:41:14

JavaScript

2012-07-25 13:25:11

ibmdw

2020-08-23 11:32:21

JavaScript開發(fā)技術

2023-02-27 08:09:42

SpringAOP代理

2011-05-25 11:15:02

Javascript繼承

2010-10-08 10:26:45

JavaScript內(nèi)

2012-01-17 09:34:52

JavaScript

2017-04-21 09:07:39

JavaScript對象編程

2009-06-10 22:07:59

JavaScriptdocument對象window對象

2010-10-08 10:52:36

JavaScript對

2012-12-25 10:51:39

IBMdW

2021-05-10 08:45:34

JavaScript開發(fā)對象

2009-06-16 15:02:18

面向?qū)ο缶幊?/a>PHP異常PHP代理

2024-05-15 18:59:01

JavaScript語言原型

2018-12-19 19:30:46

JavaScript創(chuàng)建對象前端
點贊
收藏

51CTO技術棧公眾號

日本片在线观看| 91国拍精品国产粉嫩亚洲一区| 天天色综合色| 亚洲色图在线观看| 欧美新色视频| 国产亚洲欧美中文| 尤物国产精品| 精品91视频| 亚洲最大福利视频网| 欧美日韩黄色| 精品视频一区在线视频| 久cao在线| 天天色综合成人网| 丰满人妻中伦妇伦精品app| 精品一区二区三区免费视频| 91精品视频免费看| 日本天堂一区| 久久精品视频在线| 欧美午夜三级| 亚洲精品美女免费| а√天堂8资源在线官网| 一区二区三区四区视频精品免费| 色综合小说天天综合网| 成人久久18免费网站麻豆 | 综合操久久久| 亚洲激情国产| 久久国产一区| 免费高清在线观看免费| 免费看成人哺乳视频网站| 亚洲欧美电影院| 国产精品区二区三区日本| 成人资源www网在线最新版| 亚洲精品第一| 中文字幕一区不卡| 国产精品一区二区三区久久| 欧洲亚洲一区二区三区四区五区| 天天干狠狠干| 你懂的国产精品| 亚洲欧洲色图综合| 日韩av片永久免费网站| 亚洲一区中文字幕在线观看| 欧美日韩在线不卡一区| 后进极品白嫩翘臀在线播放| 日韩一区二区三区免费播放| 中文字幕在线一区二区三区| xxxxxx欧美| 欧美国产乱子伦 | 亚洲7777| 性欧美video高清bbw| 亚洲国产中文字幕在线观看| 一区二区精品伦理...| 亚洲精品一区二区网址| 成人va天堂| 久久中文久久字幕| 国内精品偷拍| 国产精品美女视频网站| 日韩成人精品一区| 亚洲a级在线观看| 色琪琪久久se色| 国产精品视频区| 国内精品美女在线观看| 欧美福利一区二区三区| 男人操女人的视频在线观看欧美| 91社在线播放| 精品一区二区日韩| 在线观看免费视频高清游戏推荐| 亚洲视频免费在线观看| 最近中文字幕mv在线一区二区三区四区 | 国产黄大片在线观看| 精品国产在天天线2019| 丁香婷婷久久| 国产免费一区二区三区在线能观看| 亚洲精选一区| 久热免费在线观看| 欧美日精品一区视频| 伊人久久一区| 999视频在线免费观看| av电影一区二区| 日韩av成人| 久久精品国产一区二区电影| 欧美成人一品| 亚洲黄色小视频在线观看| 91在线一区| 中文字幕在线免费播放| 日韩三级高清在线| 极品美女销魂一区二区三区| 伊色综合久久之综合久久| 色爽爽爽爽爽爽爽爽| 妞干网在线观看视频| 婷婷久久综合九色国产成人| 国内精彩免费自拍视频在线观看网址 | 成人精品一区二区三区| 另类综合日韩欧美亚洲| 91免费版在线观看| 精品一区二区三区四区在线| 国产精品7m凸凹视频分类| 黄色一级片播放| 日韩欧美在线影院| 久久高清精品| 日韩一级在线免费观看| 亚洲精品一区二区精华| 日韩免费特黄一二三区| 任你操这里只有精品| 精品国免费一区二区三区| 中出一区二区| 男女性激情视频在线观看| 久久久999精品视频| 麻豆成人精品| 国产在线小视频| 国产精品久久久999| 久久久国产精品午夜一区ai换脸| 国产盗摄一区二区| 精品蜜桃一区二区三区| 一区二区三区四区不卡在线| 欧美日韩伦理一区二区| 亚洲欧美日韩在线综合| 欧美精品免费视频| 欧美日韩一卡| 飘雪影院手机免费高清版在线观看| 456国产精品| 亚洲国产成人私人影院tom| 懂色aⅴ精品一区二区三区| 人人妻人人澡人人爽精品欧美一区| 欧美人伦禁忌dvd放荡欲情| 欧美日韩亚洲一区三区| 欧洲天堂在线观看| 成人精品视频久久久久| 亚洲欧美偷拍三级| 成人自拍在线| 亚洲精品怡红院| 欧美精品国产精品日韩精品| 久久久噜噜噜久久中文字幕色伊伊 | 久久综合久久综合九色| 欧美第一视频| 蜜臀av性久久久久蜜臀av| 亚洲成人黄色在线观看| 蜜桃视频在线一区| 国产v日韩v欧美v| 一区二区成人国产精品| 亚洲精品国产欧美| 激情欧美一区二区| 亚洲福利影院| 成人免费毛片在线观看| 久久久国产精品亚洲一区| 国产亚洲精品超碰| 噜噜噜狠狠夜夜躁精品仙踪林| 成人毛片免费在线观看| 98视频在线噜噜噜国产| 亚洲私人黄色宅男| 成人久久综合| 台湾av在线二三区观看| 国产精品国产三级欧美二区| 欧美二区在线观看| 麻豆免费看一区二区三区| 日本成人三级电影| 欧美xxxxx在线视频| 欧美一级在线亚洲天堂| 五月激情综合色| 99精品视频免费观看视频| 爱看av在线| 国产aaa一级片| 日韩免费黄色av| 色综合中文综合网| 丝袜美腿成人在线| 亚洲青青久久| 91午夜在线| 日韩免费电影一区二区| 国产一区二区三区在线观看视频 | 不卡av播放| 亚洲色欲综合一区二区三区| 57pao成人国产永久免费| 亚洲1区2区3区4区| 午夜综合激情| 免费在线看污片| 欧美牲交a欧美牲交aⅴ免费下载| 日本国产欧美一区二区三区| 欧美最猛性xxxxx直播| 久久国产精品99久久久久久老狼 | 精品福利久久久| 黄色网在线免费观看| 久久精品xxx| 国产精品旅馆在线| 日韩精品一区二区三区在线| 99国产精品国产精品久久| 免费观看久久av| av中文字幕电影在线看| 一菊综合网成人综合网| 国产精品久久波多野结衣| 中文字幕亚洲欧美日韩2019| 亚洲国产成人va在线观看天堂| 日韩精品视频网| 亚洲免费福利一区| 98色花堂精品视频在线观看| 不卡的av中文字幕| 日韩免费av一区二区三区| 欧美专区第一页| 亚洲欧美制服综合另类| 色94色欧美sute亚洲线路一ni| 国产亚洲制服色| 久久精品国产精品青草|