国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表

圖片精選

主站蜘蛛池模板: 博湖县| 苗栗市| 剑河县| 昌吉市| 东辽县| 东城区| 吴江市| 西藏| 海南省| 清水河县| 冕宁县| 安仁县| 商南县| 宽甸| 新津县| 乳山市| 垦利县| 通州市| 玛曲县| 秭归县| 和林格尔县| 五莲县| 泽普县| 方山县| 漠河县| 石棉县| 宕昌县| 长治市| 枞阳县| 舒城县| 高密市| 福泉市| 漯河市| 平度市| 烟台市| 陈巴尔虎旗| 贡觉县| 西畴县| 林芝县| 麻栗坡县| 辽宁省|