這篇文章將為大家詳細(xì)講解有關(guān)es6中的Proxy是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
試題解析:對proxy的理解,可能會延伸到vue的雙向綁定
Proxy(代理) 定義
可以理解為為目標(biāo)對象架設(shè)一層攔截,外界對該對象的訪問,都必須通過這層攔截
簡單示例:
const obj = new Proxy({}, { get: (target, key, receiver) => { return 'JS' console.log(`get ${key}`) }, set: (target, key, value, receiver) => { console.log(`set ${key}`) }, }) obj.name = 'JS 每日一題' // set name // JS 每日一題 obj.name // 這里進(jìn)入get的回調(diào)函數(shù),所有直接返回 JS
從上面的示例中可以看出,Proxy存在一種機(jī)制,可以對外界的讀寫操作進(jìn)行改寫
Proxy 實例方法proxy除了代理get,set操作,還能代理其它的操作,如下
handler.getPrototypeOf() // 在讀取代理對象的原型時觸發(fā)該操作,比如在執(zhí)行 Object.getPrototypeOf(proxy) 時。 handler.setPrototypeOf() // 在設(shè)置代理對象的原型時觸發(fā)該操作,比如在執(zhí)行 Object.setPrototypeOf(proxy, null) 時。 handler.isExtensible() // 在判斷一個代理對象是否是可擴(kuò)展時觸發(fā)該操作,比如在執(zhí)行 Object.isExtensible(proxy) 時。 handler.preventExtensions() // 在讓一個代理對象不可擴(kuò)展時觸發(fā)該操作,比如在執(zhí)行 Object.preventExtensions(proxy) 時。 handler.getOwnPropertyDescriptor() // 在獲取代理對象某個屬性的屬性描述時觸發(fā)該操作,比如在執(zhí)行 Object.getOwnPropertyDescriptor(proxy, "foo") 時。 handler.defineProperty() // 在定義代理對象某個屬性時的屬性描述時觸發(fā)該操作,比如在執(zhí)行 Object.defineProperty(proxy, "foo", {}) 時。 handler.has() // 在判斷代理對象是否擁有某個屬性時觸發(fā)該操作,比如在執(zhí)行 "foo" in proxy 時。 handler.get() // 在讀取代理對象的某個屬性時觸發(fā)該操作,比如在執(zhí)行 proxy.foo 時。 handler.set() // 在給代理對象的某個屬性賦值時觸發(fā)該操作,比如在執(zhí)行 proxy.foo = 1 時。 handler.deleteProperty() // 在刪除代理對象的某個屬性時觸發(fā)該操作,比如在執(zhí)行 delete proxy.foo 時。 handler.ownKeys() // 在獲取代理對象的所有屬性鍵時觸發(fā)該操作,比如在執(zhí)行 Object.getOwnPropertyNames(proxy) 時。 handler.apply() // 在調(diào)用一個目標(biāo)對象為函數(shù)的代理對象時觸發(fā)該操作,比如在執(zhí)行 proxy() 時。 handler.construct() // 在給一個目標(biāo)對象為構(gòu)造函數(shù)的代理對象構(gòu)造實例時觸發(fā)該操作,比如在執(zhí)行new proxy() 時。為什么要使用Proxy
攔截和監(jiān)視外部對對象的訪問
降低函數(shù)或類的復(fù)雜度
在復(fù)雜操作前對操作進(jìn)行校驗或?qū)λ栀Y源進(jìn)行管理
關(guān)于es6中的Proxy是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
分享標(biāo)題:es6中的Proxy是什么-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://sd-ha.com/article40/jjjho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、App設(shè)計、域名注冊、企業(yè)網(wǎng)站制作、微信小程序、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容