ES6之proxy

? ? ? proxy用于修改某些操作的默認行為翰灾,等同于在語言層面上修改缕粹,所以屬于元編程,即對編程語言進行編程纸淮。proxy可以理解為在目標對象之前設(shè)立一層攔截平斩,外界對該對象的訪問都必須通過這層攔截,因此對外界的訪問進行過濾或修改咽块,也可以說成是對某些操作進行識別或者修改绘面。

? ? ? ES6中proxy函數(shù)的表現(xiàn)形式:var proxy = new Proxy(target,handler)。new Proxy()表示生成一個proxy實例侈沪,target表示攔截的對象揭璃,handler表示一個配置對象,包含著為每個需要被攔截的行為提供對應(yīng)的處理函數(shù)亭罪,handler如果沒有任何設(shè)置那么直通原對象瘦馍。

? ? ? 下面是一些設(shè)置的操作:get(target,propKey,reciver)攔截對象屬性的獲取,但是如果一個屬性被配置不可寫和不可配置的話那么該屬性就不能被代理应役;set(target,propKey,value,reciver)攔截對象屬性的設(shè)置情组;has(target,propKey)攔截propKey in proxy的操作,返回一個布爾值,但是面對不可配置的屬性依然會報錯箩祥,而且has針對for..in無效院崇;deleteProperty(target,propKey)攔截 delete proxy[propKey] 的操作,返回一個布爾值袍祖,如果這個方法拋出錯誤或者返回false當前屬性就無法被delete命令刪除(屬性如果是不可配置的刪除會報錯)底瓣;ownkeys(target,propkey)攔截Object.getownPropertyNames(proxy)、Object.getPropertySymbols(proxy)蕉陋、Object.keys(proxy)捐凭,返回一個數(shù)組,數(shù)組成員只能是字符串或者symbol寺滚,注意使用object.keys時有三種屬性會被ownkeys自動過濾(目標對象上不存在的屬性柑营、屬性名為symbol的屬性、不可遍歷的屬性)村视,如果目標對象包含不可配置屬性那么該屬性必須被ownkeys返回官套,如果目標對象是不可擴展的那么返回的數(shù)組中必須包含愿對象中的所有屬性且不能包含多余屬性。該方法返回目標對象的所有自身屬性的屬性名蚁孔,而Object,keys返回的對象僅包括目標對象自身的可遍歷屬性奶赔;getOwnPropertyDescriptor(target,propKey)攔截Object.getOwnPropertyDescriptor(proxy,prpKey),返回屬性的描述對象或者undefined;defineProperty(target,propKey,propDesc)攔截Object.defineProperty(target,propKey,propDesc)杠氢、Object.defineProperties(proxy,propDesc),返回一個布爾值站刑,如果對象不可擴展則defineProperties不能增加目標對象的屬性否則報錯,如果目標對象的屬性不可配置或不可寫那么defineProperty不可更改這個屬性鼻百;preventExtensions(target)攔截preventExtensions(target)绞旅,返回一個布爾值摆尝,只有目標對象是不可擴展的返回的才是true;getPropertyOf(target)攔截getPropertyOf(target),攔截獲取對象原型,返回一個對象或者null否則報錯因悲,如果目標對象不可擴展那么返回原型對象堕汞;isExtensible(target)攔截Object.isExtensible(proxy),返回一個布爾值,而且該方法返回的值必須和目標對象的isExtensible一致不然報錯晃琳;setPropertyOf(target,prop)攔截Object.setPropertyOf(proxy,prop), 返回一個布爾值讯检,如果目標對象是不可擴展的那么setPropertyOf方法不得改變目標對象的原型;apply(target,object,args)攔截Proxy作為實例函數(shù)調(diào)用和call卫旱、apply的操作人灼,如proxy(...args),proxy.call(object,...args),proxy.apply(....);construct(target,args)攔截Proxy實例作為構(gòu)造函數(shù)調(diào)用的操作,其實就是用于攔截new命令顾翼,construct接受兩個參數(shù)target目標對象,args構(gòu)造函數(shù)的參數(shù)對象适贸,construct方法必須返回一個對象跪呈,否則報錯。

? ? ?Proxy.revocable返回一個可取消的proxy實例取逾,它返回的是一個對象這個對象的proxy屬性是Proxy實例耗绿,revoke屬性是一個函數(shù)可以取消proxy。雖然Proxy可以代理針對目標對象的訪問砾隅,但是他不是目標對象的透明代理误阻,即不做任何攔截的情況下,也無法保證與目標對象行為一致晴埂,因為在Proxy代理的情況下目標對象內(nèi)部的this指向proxy代理究反。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市儒洛,隨后出現(xiàn)的幾起案子精耐,更是在濱河造成了極大的恐慌,老刑警劉巖琅锻,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卦停,死亡現(xiàn)場離奇詭異,居然都是意外死亡恼蓬,警方通過查閱死者的電腦和手機惊完,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來处硬,“玉大人小槐,你說我怎么就攤上這事『稍” “怎么了凿跳?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵件豌,是天一觀的道長。 經(jīng)常有香客問我控嗜,道長苟径,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任躬审,我火速辦了婚禮,結(jié)果婚禮上蟆盐,老公的妹妹穿的比我還像新娘承边。我一直安慰自己,他們只是感情好石挂,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布博助。 她就那樣靜靜地躺著,像睡著了一般痹愚。 火紅的嫁衣襯著肌膚如雪富岳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天拯腮,我揣著相機與錄音窖式,去河邊找鬼。 笑死动壤,一個胖子當著我的面吹牛萝喘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播琼懊,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼阁簸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哼丈?” 一聲冷哼從身側(cè)響起启妹,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎醉旦,沒想到半個月后饶米,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡车胡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年咙崎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吨拍。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡褪猛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出羹饰,到底是詐尸還是另有隱情伊滋,我是刑警寧澤碳却,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站笑旺,受9級特大地震影響昼浦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筒主,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一关噪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乌妙,春花似錦使兔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泽艘,卻和暖如春欲险,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匹涮。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工天试, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人然低。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓秋秤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脚翘。 傳聞我的和親對象是個殘疾皇子灼卢,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • defineProperty() 學習書籍《ECMAScript 6 入門 》 Proxy Proxy 用于修改某...
    Bui_vlee閱讀 649評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)来农,斷路器鞋真,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • Proxy Proxy用于修改某些操作的默認行為,等同于在語言層面作出修改沃于,所以屬于一種“元編程”涩咖,即對編程語言進...
    南藍NL閱讀 450評論 0 0
  • 筆記,完全摘錄自阮一峰 proxy的概念 proxy英文原意是代理的意思繁莹,在ES6中檩互,可以翻譯為"代理器"。它主要...
    布蕾布蕾閱讀 22,437評論 0 8
  • 從網(wǎng)上買的書今天收到了咨演,小樂和伙伴都愛不釋手闸昨,晚上一起下來玩的時候也忍不住一起讀書,這用功勁兒不要三分鐘熱度才好啊...
    一瓶花開閱讀 303評論 0 4