ES6入門筆記(六)

Proxy

Proxy用于修改某些操作的默認行為轻要,等同于在語言層面作出修改,所以屬于一種“元編程”懂版,即對編程語言進行編程

ES6原生提供Proxy構(gòu)造函數(shù)潭千,用來生成Proxy實例

var proxy = newProxy(target,handler);

new Proxy()表示生成一個Proxy實例衩侥。target參數(shù)是索要攔截的目標對象国旷,handler參數(shù)也是一個對象,用來定制攔截行為

注意茫死,要使得Proxy起作用跪但,必須針對Proxy實例進行操作,而不是針對目標對象峦萎。

如果handler沒有設置任何攔截屡久,那就等同于直接通向原對象

上面代碼中,handler是一個空對象爱榔,沒有任何攔截效果被环,訪問proxy就等用于訪問target

下面是Proxy支持的攔截操作一覽,對于可以設置详幽、但沒有設置攔截的操作筛欢,則直接落在目標對象上,按照原先的方式產(chǎn)生結(jié)果

1)get(target唇聘、propKey版姑、receiver)

攔截對象屬性的讀取,比如proxy.foo和proxy['foo']

2)set(target雳灾、propKey漠酿、value、receiver)

攔截對象屬性的設置

3)has(target谎亩,proKey)

攔截propKey in proxy的操作炒嘲,返回一個布爾值

4)deleteProperty(target,propKey)

攔截delete proxy[propKey]的操作匈庭,返回一個布爾值夫凸。

5)ownKeys(target)

攔截Object.getOwnPropertyNames(proxy)、Object.getOwnPropertySymbols(proxy)阱持、Object.keys(proxy)夭拌,返回一個數(shù)組。該方法返回目標對象所有自身的屬性的屬性名衷咽,而Object.keys()的返回結(jié)果僅包括目標對象自身的可遍歷屬性鸽扁。

6)getOwnPropertyDescriptor(target,propKey)

攔截Object.getOwnPropertyDescriptor(proxy, propKey),返回屬性的描述對象镶骗。

7)defineProperty(taget桶现,propKey,propDesc)

攔截Object.defineProperty(proxy, propKey, propDesc)鼎姊、Object.defineProperties(proxy, propDescs)骡和,返回一個布爾值。

8)preventExtensions(target)

攔截Object.preventExtensions(proxy)相寇,返回一個布爾值慰于。

(9)getPrototypeOf(target)

攔截Object.getPrototypeOf(proxy),返回一個對象唤衫。

(10)isExtensible(target)

攔截Object.isExtensible(proxy)婆赠,返回一個布爾值。

(11)setPrototypeOf(target, proto)

攔截Object.setPrototypeOf(proxy, proto)佳励,返回一個布爾值休里。

如果目標對象是函數(shù),那么還有兩種額外操作可以攔截植兰。

(12)apply(target, object, args)

攔截 Proxy 實例作為函數(shù)調(diào)用的操作份帐,比如proxy(...args)、proxy.call(object, ...args)楣导、proxy.apply(...)废境。

(13)construct(target, args)

攔截 Proxy 實例作為構(gòu)造函數(shù)調(diào)用的操作,比如new proxy(...args)筒繁。

Proxy實例的方法

get()方法用于攔截某個屬性的讀取操作噩凹。

3、Proxy.revocable()

Proxy.revocable方法返回一個可取消的Proxy實例

4毡咏、this問題

5驮宴、實例web服務的客戶端

Reflect

1)reflect對象與Proxy對象一樣,也是ES6為了操作對象而提供的心API

2)靜態(tài)方法呕缭,大部分與object對象的同名方法的作用都是相同堵泽,而且它與Proxy對象的方法是一一對應的修己。

3)Reflect.apply(target,thisArg,args) ?這個方法等同于Function.prototype.apply.call(funnc,thisArg,args),用于綁定this對象對象后執(zhí)行給定函數(shù)

4)Reflect.construct(target,args) ? 這個方法等同于new target(...args),這提供了一種不使用new來吊桶構(gòu)造函數(shù)的方法

5)Reflect.get(target,name,receiver)查找并返回target對象的name屬性,如果沒有該屬性迎罗,則返回undefined睬愤。如果第一個參數(shù)不是對象,Reflect.get方法會報錯

6)Reflect.set(target,name,value,receiver) Reflect.set方法設置target對象的name屬性等于value

Reflect.set與Reflect.get一樣纹安,如果第一個參數(shù)不是對象尤辱,它會報錯

注意Reflect.set會出發(fā)Proxy.defineProperty攔截

7)Reflect.defineProperty(target,name,desc) 這個方法等用于Object.defineProperty,用來為對象定義屬性。未來后者被逐漸剔除

8)Reflect.deleteProperty(target,name) ? 用于刪除對象的屬性 等同于 delete obj[name]

9)Reflect.has(target,name) ? ? 對應name in obj里面的in運算符

Reflect.ownKeys(target) ?基本等同于Object.getOwnPropertyNames與Object.getOwnPropertySymbols之和厢岂。

Reflect.isExtensible(target) ?這個方法對應Object.preventExtensions方法光督,用于讓一個對象編程不可擴展。它返回一個布爾值塔粒,表示是否操作成功

Reflect.preventExtensions(target)

Reflect.getOwnPropertyDescriptor(target, name) 這個方法等同于Object.getOwnPropertyDescriptor用于得到指定屬性的描述對象

Reflect.getPrototypeOf(target) ?用于讀取對象的_proto_屬性结借,對應Object.getPrototypeof(obj)

Reflect.getPrototypeOf和Object.getPrototypeof的一個區(qū)別是,如果參數(shù)不是對象窗怒,Object.getProrypeOf會將這個參數(shù)轉(zhuǎn)為對象映跟,然后再運行,但是Reflect.getPrototypeof會報錯

Reflect.setPrototypeOf(target, prototype) 用于設置對象的_proto_屬性扬虚,返回第一個參數(shù)對象努隙,對應Object.setPrototypefOf(obj)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辜昵,隨后出現(xiàn)的幾起案子荸镊,更是在濱河造成了極大的恐慌,老刑警劉巖堪置,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躬存,死亡現(xiàn)場離奇詭異,居然都是意外死亡舀锨,警方通過查閱死者的電腦和手機岭洲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坎匿,“玉大人盾剩,你說我怎么就攤上這事√媸撸” “怎么了告私?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長承桥。 經(jīng)常有香客問我驻粟,道長,這世上最難降的妖魔是什么凶异? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任蜀撑,我火速辦了婚禮挤巡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屯掖。我一直安慰自己玄柏,他們只是感情好襟衰,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布贴铜。 她就那樣靜靜地躺著,像睡著了一般瀑晒。 火紅的嫁衣襯著肌膚如雪绍坝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天苔悦,我揣著相機與錄音轩褐,去河邊找鬼。 笑死玖详,一個胖子當著我的面吹牛把介,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蟋座,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼拗踢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了向臀?” 一聲冷哼從身側(cè)響起巢墅,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎券膀,沒想到半個月后君纫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡芹彬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年蓄髓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舒帮。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡会喝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出会前,到底是詐尸還是另有隱情好乐,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布瓦宜,位于F島的核電站蔚万,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏临庇。R本人自食惡果不足惜反璃,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一昵慌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淮蜈,春花似錦斋攀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至裁眯,卻和暖如春鹉梨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背穿稳。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工存皂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逢艘。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓旦袋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親它改。 傳聞我的和親對象是個殘疾皇子疤孕,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

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

  • defineProperty() 學習書籍《ECMAScript 6 入門 》 Proxy Proxy 用于修改某...
    Bui_vlee閱讀 648評論 0 1
  • Proxy 對象 Proxy 用來修改某些默認操作,等同于在語言層面做出修改搔课。所以屬于一種元編程(meta pro...
    faremax閱讀 351評論 0 0
  • 本人自學es6已經(jīng)有一段時間了胰柑,只覺得有些時候很是枯燥無味, 時而又覺得在以后的職業(yè)生涯中會很有用爬泥,因為es6的很...
    可樂_37d3閱讀 1,519評論 0 0
  • ECMAScript發(fā)展歷史 (1)ECMA-262 第1版:去除了對針對瀏覽器的特性袍啡,支持Unicode標準(多...
    congnie116閱讀 1,859評論 0 2
  • -01- 昨日早上醒來打開手機境输,竟有爺爺發(fā)來的一條微信蔗牡,趕忙打開看,原來他想問我過年能否回家嗅剖。第一年駐外辩越,十一期間...
    一顆獼猴呆閱讀 370評論 6 4