本文實(shí)例講述了ES6 proxy和reflect的使用方法。分享給大家供大家參考,具體如下:
成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)十年經(jīng)驗(yàn)成就非凡,專業(yè)從事網(wǎng)站建設(shè)、網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)頁(yè)制作,軟文營(yíng)銷,廣告投放等。十年來(lái)已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:18980820575,我們期待您的來(lái)電!
proxy和reflect都是es6為了更好的操作對(duì)象而提供的新的API,接下來(lái)探討一下二者的作用,聯(lián)系。
設(shè)計(jì)proxy,reflect的作用:
proxy的作用:
Proxy的設(shè)計(jì)目的在于(修改編程語(yǔ)言),修改某些操作方法的默認(rèn)行為,
等同于在語(yǔ)言層面作出修改,是元編程(meta programming) 例如修改set,get方法
reflect的作用:
1,映射一些明顯屬于對(duì)象語(yǔ)言內(nèi)部的方法,目前是共存于Object
和Reflect上,未來(lái)只在Reflect上
2,修改一些Object
上的方法返回的結(jié)果,減少異常拋出,使其變得更加合理
3,讓Object
操作都變成函數(shù)行為(主要的作用)
4,Reflect
對(duì)象的方法與Proxy
對(duì)象的方法一一對(duì)應(yīng)(主要的作用)
proxy和reflect的方法:
proxy的實(shí)例方法:
get() | set() | apply() | has() | cunstruct() | deleteProperty() | defineProperty() |
getOwnPropertyDescriptor() | getPrototypeOf() | isExtensible() | ownKeys(), | preventExtensions() | setPrototypeOf() |
var person = { name: "張三" }; var proxy = new Proxy(person, { get: function(target, property) { if (property in target) { return target[property]; } else { throw new ReferenceError("Property \"" + property + "\" does not exist."); } } });
注:目標(biāo)對(duì)象內(nèi)部的this
關(guān)鍵字會(huì)指向 Proxy 代理
自身方法:Proxy.revocable
方法返回一個(gè)可取消的 Proxy 實(shí)例
reflect的靜態(tài)方法:
和proxy相對(duì)應(yīng),reflect有13個(gè)靜態(tài)方法,分別一一對(duì)應(yīng)于proxy的實(shí)例方法
Reflect.apply(target, thisArg, args) | Reflect.construct(target, args) |
Reflect.get(target, name, receiver) | Reflect.set(target, name, value, receiver) |
Reflect.defineProperty(target, name, desc) | Reflect.deleteProperty(target, name) |
Reflect.has(target, name) | Reflect.ownKeys(target) |
Reflect.isExtensible(target) | Reflect.preventExtensions(target) |
Reflect.getOwnPropertyDescriptor(target, name) | Reflect.getPrototypeOf(target) |
Reflect.setPrototypeOf(target, prototype) |
實(shí)例:觀察者模式的實(shí)現(xiàn)
const queuedObservers = new Set(); const observe = fn => queuedObservers.add(fn);//接收一個(gè)函數(shù)fn const observable = obj => new Proxy(obj, {set});//接收一個(gè)對(duì)象obj,采用set函數(shù)攔截設(shè)置obj function set(target, key, value, receiver) { const result = Reflect.set(target, key, value, receiver); queuedObservers.forEach(observer => observer()); return result; }
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript操作DOM技巧總結(jié)》、《JavaScript頁(yè)面元素操作技巧總結(jié)》、《JavaScript事件相關(guān)操作與技巧大全》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
當(dāng)前名稱:ES6proxy和reflect的使用方法與應(yīng)用實(shí)例分析
網(wǎng)頁(yè)地址:http://www.muchs.cn/article40/pieeho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站排名、做網(wǎng)站、小程序開(kāi)發(fā)、搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)