国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

ES6 如何改變JS內(nèi)置行為的代理與反射

2024-05-06 15:42:32
字體:
供稿:網(wǎng)友

代理(Proxy)可以攔截并改變 JS 引擎的底層操作,如數(shù)據(jù)讀取、屬性定義、函數(shù)構(gòu)造等一系列操作。ES6 通過對這些底層內(nèi)置對象的代理陷阱和反射函數(shù),讓開發(fā)者能進一步接近 JS 引擎的能力。

一、代理與反射的基本概念

什么是代理和反射呢?

代理是用來替代另一個對象(target),JS 通過new Proxy()創(chuàng)建一個目標對象的代理,該代理與該目標對象表面上可以被當作同一個對象來對待。

當目標對象上的進行一些特定的底層操作時,代理允許你攔截這些操作并且覆寫它,而這原本只是 JS 引擎的內(nèi)部能力。

如果你對些代理&反射的概念比較困惑的話,可以直接看后面的應(yīng)用示例,最后再重新看這些定義就會更清晰!

攔截行為使用了一個能夠響應(yīng)特定操作的函數(shù)( 被稱為陷阱),每個代理陷阱對應(yīng)一個反射(Reflect)方法。

ES6 的反射 API 以 Reflect 對象的形式出現(xiàn),對象每個方法都與對應(yīng)的陷阱函數(shù)同名,并且接收的參數(shù)也與之一致。以下是 Reflect 對象的一些方法:

代理陷阱 覆寫的特性 方法
get 讀取一個屬性的值 Reflect.get()
set 寫入一個屬性 Reflect.set()
has in 運算符 Reflect.has()
deleteProperty delete 運算符 Reflect.deleteProperty()
getPrototypeOf Object.getPrototypeOf() Reflect.getPrototypeOf()
isExtensible Object.isExtensible() Reflect.isExtensible()
defineProperty Object.defineProperty() Reflect.defineProperty
apply 調(diào)用一個函數(shù) Reflect.apply()
construct 使用 new 調(diào)用一個函數(shù) Reflect.construct()

每個陷阱函數(shù)都可以重寫 JS 對象的一個特定內(nèi)置行為,允許你攔截并修改它。

綜合來說,想要控制或改變JS的一些底層操作,可以先創(chuàng)建一個代理對象,在這個代理對象上掛載一些陷阱函數(shù),陷阱函數(shù)里面有反射方法。通過接下來的應(yīng)用示例可以更清晰的明白代理的過程。

二、開始一個簡單的代理

當你使用 Proxy 構(gòu)造器來創(chuàng)建一個代理時,需要傳遞兩個參數(shù):目標對象(target)以及一個處理器( handler),

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 南宁市| 诏安县| 高阳县| 清苑县| 灵璧县| 龙海市| 阿尔山市| 松阳县| 康定县| 永仁县| 宝山区| 阳信县| 洪湖市| 武胜县| 雷山县| 赣州市| 廊坊市| 凤凰县| 会东县| 禹州市| 晋宁县| 永修县| 西乡县| 光泽县| 井冈山市| 徐汇区| 嵊州市| 攀枝花市| 柳林县| 茌平县| 丰城市| 汝南县| 苏州市| 句容市| 安顺市| 新蔡县| 芦山县| 调兵山市| 呼玛县| 利川市| 青阳县|