Reflect

ladybug7發表於2024-06-13

1.概述

Reflect 物件與 Proxy 物件一樣,也是 ES6 為了操作物件而提供的新 API。Reflect 物件的設計目的有這樣幾個。

(1)將 Object 物件的一些明顯屬於語言內部的方法(比如 Object.defineProperty ),放到 Reflect 物件上。現階段,某些方法同時在 ObjectReflect 物件上部署,未來的新方法將只部署在 Reflect 物件上。也就是說,從 Reflect 物件上可以拿到語言內部的方法。

(2)修改某些 Object 方法的返回結果,讓其變得更合理。比如 Object.defineProperty(obj, name, desc) 在無法定義屬性時,會丟擲一個錯誤,而 Reflect.defineProperty(obj, name, desc) 則會返回 false

(3)讓 Object 操作都變成函式行為。某些 Object 操作是命令式,比如 name in objdelete obj[name] ,而 Reflect.has(obj, name)Reflect.deleteProperty(obj, name) 讓它們變成了函式行為。

(4)Reflect 物件的方法與 Proxy 物件的方法一一對應,只要是 Proxy 物件的方法,就能在 Reflect 物件上找到對應的方法。這就讓 Proxy 物件可以方便地呼叫對應的 Reflect 方法,完成預設行為,作為修改行為的基礎。也就是說,不管 Proxy 怎麼修改預設行為,你總可以在 Reflect 上獲取預設行為。

相關文章