整理ES6:Reflect和Object的关系
原文链接:https://github.com/taoliujun/blog/issues/11
Reflect是什么
在我若干年前阅读Reflect文档的那几天,我常闷被里自问,这是个什么玩意?随着时间的推移,我对它的理解越来越深刻,也越来越喜欢它。我想,这是一个值得深入研究的东西。(这句话是Copilot补充的,我觉得很有道理,就留下来了)
Reflect是操作对象用的,我觉得Reflect最大的用处有两个。
一是将Object的命令式、函数式混用行为,统一成函数式行为。比如delete obj.key
,key in obj
对应为Reflect.deleteProperty(obj, key)
和Reflect.has(obj, key)
。
二是Reflect的方法和Proxy的拦截器一一对应,这样就可以用Reflect来实现Proxy的拦截器,而不用再写一遍拦截器的逻辑。比如Reflect.get(obj, key)
对应为get
拦截器,Reflect.set(obj, key, value)
对应为set
拦截器。
它拥有的静态方法和Proxy一样多
get
1 | const user = { |
1 | 20 |
代码很好理解,不一一表述了。
set
1 | const user = { |
1 | { name: '李四', age: 20 } |
delete
1 | const user = { |
1 | { age: 20 } |
更多的方法见MDN即可。