V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
gaocc
V2EX  ›  问与答

ES6 的 Proxy 与 Reflect 使用的多吗?

  •  
  •   gaocc · 2019-02-22 17:03:51 +08:00 · 2161 次点击
    这是一个创建于 2083 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用了快一年 vue,语法也是 ES6,但一直没用到过 Proxy 与 Reflect,看见说明文档给了一堆示例,这俩东西的使用场景有哪些?多的话,我再去研究下

    9 条回复    2019-02-22 17:58:28 +08:00
    noe132
        1
    noe132  
       2019-02-22 17:16:12 +08:00 via Android
    proxy 类似于元编程,可以 override 一些操作,如 get set hasOwnProperty 可以简单的对某个对象进行代理封装

    reflect 就是字面意思反射。只不过 js 已经有反射了,reflect 提供的是更加统一一致的 api。反射的概念一般在 java 很常见,用来动态加载类和调用方法。在 js 里的反射就是点操作符
    zzNucker
        2
    zzNucker  
       2019-02-22 17:18:41 +08:00
    要涉及到框架或者安全方面编程的时候用的比较多,一般不太用到。
    shintendo
        3
    shintendo  
       2019-02-22 17:28:37 +08:00
    Vue 3 内部就是用 Proxy 实现响应式系统
    akatquas
        4
    akatquas  
       2019-02-22 17:33:05 +08:00 via iPhone
    你们 Symbol 有实际项目使用吗?
    azh7138m
        5
    azh7138m  
       2019-02-22 17:36:53 +08:00 via Android
    @noe132 元编程可不是这个意思。。。

    proxy 很好用,主要是 getter 和 setter 可以操作之前不存在的 key,类似 php 的那些对象上的魔术方法,之前一个小 demo 也用了 proxy,不用的话有些东西不好实现

    https://github.com/muzea-demo/random-data/blob/master/lib.mjs#L84 比如我想控制一些变量的值的时候,就只能用 proxy 去实现(当然,提前把所有的变量名算出来也行)
    rabbbit
        6
    rabbbit  
       2019-02-22 17:39:55 +08:00
    就用过一次, 用来把 Dom 和对象封装成数组
    ttps://github.com/Aaron-Bird/ivy/blob/master/src/main.js#L172
    ayase252
        7
    ayase252  
       2019-02-22 17:46:33 +08:00 via iPhone
    通过劫持 ComponentDidMount,实现某个页面打开的时候打一个 log。
    meteor957
        8
    meteor957  
       2019-02-22 17:53:46 +08:00 via Android
    没用过
    ChefIsAwesome
        9
    ChefIsAwesome  
       2019-02-22 17:58:28 +08:00
    曾经尝试拿这东西造一种看着跟正常对象一样,其实是 immutable 的数据。发现速度挺慢,内部挺绕,还不如直接搞个有 get set 方法的对象好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3535 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:41 · PVG 18:41 · LAX 02:41 · JFK 05:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.