V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
frankkai
V2EX  ›  前端开发

请教一下 Object.defineProperty 的应用场景

  •  
  •   frankkai · 2020-09-04 17:20:03 +08:00 · 1476 次点击
    这是一个创建于 1324 天前的主题,其中的信息可能已经有所发展或是发生改变。

    除了 vue 的双向数据绑定,这个 api 有更多的应用场景吗?

    前端 V 友们都来说说呗,不胜感激

    7 条回复    2022-02-08 10:33:46 +08:00
    louieliu
        1
    louieliu  
       2020-09-04 18:11:00 +08:00 via iPhone
    现在就直接用 Proxy 配合 Reflect 了
    Mutoo
        2
    Mutoo  
       2020-09-04 19:20:58 +08:00   ❤️ 1
    一般是框架或构建工具用来定义一些特殊接口(例如只读)时使用,例如 webpack 对 export/import 的实现。平时很少会用。

    感觉 defineProperty 的出现更多是为 es6+ 实现向下兼容,方便对 es5 进行 polyfill 实现新功能打基础。
    murmur
        3
    murmur  
       2020-09-04 19:33:52 +08:00
    有的时候可以拿来对变量进行监控,绑定 getter setter 方法打断点

    当然框架用是最多的,能 polyfill 到 ie 上的都能用 defineProperty
    frankkai
        4
    frankkai  
    OP
       2020-09-04 20:42:08 +08:00
    @murmur 对变量做监控确实可以,感觉也算是一个埋点:在 setter 里统计某个变量的次数,做一些日志上报之类的
    frankkai
        5
    frankkai  
    OP
       2020-09-04 20:43:28 +08:00
    @louieliu Proxy 配合 Reflect 弥补了 Object.defineProperty 那些不足呢
    frankkai
        6
    frankkai  
    OP
       2020-09-04 20:48:29 +08:00
    @Mutoo 做到只读属性的话 设置 writable 和 configurable 为 false 感觉就行了 这样有点像冻结对象属性
    只读的特殊接口指的是啥 不太懂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2795 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:41 · PVG 22:41 · LAX 07:41 · JFK 10:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.