V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
murmur
V2EX  ›  程序员

关于 ES 的那个 defineProperty,写一点自己的看法

  •  
  •   murmur · 2019-03-27 11:28:19 +08:00 · 2660 次点击
    这是一个创建于 2076 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先,原帖来看,如果看了楼主的发帖,能大概看出这前端也就是个称职的页面工程师,所以那个面试者靠多次面试建立题库完全可行,毕竟别人就是拧螺丝写页面的,不了解底层原理把页面做出来 OK 啊。

    那么我们来看一下这个被吹的 defineProperty,在一般开发者手里能干吗

    1、网上最多的,当然就是 vue 的例子,但是绝大多数的例子也就是 vue,如果 vue 能让你不需要了解 defineProperty 就把框架用的舒舒服服明明白白的,当然是 vue 牛逼!!!

    2、魔改一个 object,因为你可以定义这东西可不可以被枚举,是不是只读的,但是作为一个极其灵活的语言来说,一个东西该怎么用是靠团队规范和代码检查的,不需要用或者改的时候我碰都不会碰,当我需要改你东西的时候我有一万种方法让你的 defineProperty 失效,所以这个是可以规避的,类似的,如果我的数据和方法分开,我不会担心 Array 里有不想被枚举出来的东西,我不会魔改基础函数,我的扩展函数都在 utils 里,我不认为用 ArrayUtils 的就比直接在 Array.prototype 上挂东西的人低一等(以前 IE 里有一个坑就是再 Array.prototype 上不通过 defineProperty 挂函数,这个函数会被枚举出来,但是我不挂不就好了么。。。)

    3、框架里挂 getter 提示方法即将被废弃,这也是我搜索后才学到的用法,当然别人是框架,而且在 API 更迭时才会用到,何况对于程序员 warning 不等于没有么,只有真的我发现你把这 API 删了我才会发现(例子和出处参考 https://cloud.tencent.com/developer/article/1009647

    4、调试,当我发现某个变量被改了,我不知道谁改的,可以用 defineProperty 下钩子,不过不会这个东西问题不大,如果我的调试足够牛逼,或者我的运气足够好,我不下钩子就能快速定位到问题所在,或者我的属性赋值用的是 java 那种 setXXX,getXXX 的写法,这个东西也是可以规避的

    5、简化写法,这也是腾讯文中的例子,但是我认为这个方法是个反例,通过 defineProperty 将 style 里的属性挪到外层来(比如 dom.transform=xxx,而不是 dom.style.tranform=xxx ),会给没读过相关代码的人一个误解,反倒是定义一个 setTranform/setTranslate 这样的函数更安全,毕竟后面一看就是个自己定义的工具函数,前面的是个什么东西?新特性?写错了?

    所以看来,框架帮我们屏蔽掉了很多细节,npm 上的各种 utils 让我们避开了这个方法,就算不知道似乎也不丢人,当然知道是加分项,人家只是想做做页面而已,又不是开发个新框架

    20 条回复    2019-03-28 10:11:38 +08:00
    owenliang
        1
    owenliang  
       2019-03-27 11:41:17 +08:00
    的确,语法问题
    roscoecheung1993
        2
    roscoecheung1993  
       2019-03-27 11:41:24 +08:00
    所以原帖是啥....
    murmur
        3
    murmur  
    OP
       2019-03-27 11:45:14 +08:00
    enenaaa
        4
    enenaaa  
       2019-03-27 11:59:15 +08:00
    我个人挺讨厌这种覆盖标准库的写法的。 增加其他人的理解工作量。
    molvqingtai
        5
    molvqingtai  
       2019-03-27 12:50:16 +08:00 via Android
    这不是面试刷不刷题的问,关键是简历写了 9 年工作经验,写了 9 年代码却没有研究过这些框架的实现原理,说明你这个人就没有学习的心态和自我提升的意识,这又是不是什么好深奥的算法,像 defineProperty 这种双绑原理网上分析文章一大堆,你都没有瞥过一眼,说明你对你的工作和技术缺乏最基本的热情,只想当一条咸鱼混日子。

    工作够用就行了吗?当然,对于像我这刚入行一两年的程序员确实技能够用行了,不知道一些框架原理,好像也没什么不对,但是我认为作为一个工作了 9 年的程序员,一个从量变到质变的过程,如果连一些最基本的原理都没有了解过的话,我认为这很不对!
    ax521
        6
    ax521  
       2019-03-27 12:51:12 +08:00 via Android
    我怎么回复不了
    murmur
        7
    murmur  
    OP
       2019-03-27 12:51:47 +08:00
    @molvqingtai 准确点说 vue 就近两三年才开始火的,如果是个传统公司开发,前面用 flash、extjs、jquery 也不奇怪,甚至他可能会 java 但是没太准备都没写上去
    Justin13
        8
    Justin13  
       2019-03-27 12:52:40 +08:00 via Android
    一般只在调试的时候用用。还有 freeze 类似
    ben1024
        9
    ben1024  
       2019-03-27 12:53:45 +08:00
    ECMAScript ? 认为是 elasticsearch ? 我可能进错了
    jinue9900
        10
    jinue9900  
       2019-03-27 13:51:09 +08:00
    @ben1024 23333 进来之前跟你一样
    shyrock
        11
    shyrock  
       2019-03-27 13:56:28 +08:00
    如果面试就一个人,我就问工作中实际的问题;如果有多个人而且都能解决实际问题,还非要我选一个招进来,我就会问这些屠龙之技了。
    TomVista
        12
    TomVista  
       2019-03-27 15:58:32 +08:00
    双向绑定不是用的 getter setter 吗?
    murmur
        13
    murmur  
    OP
       2019-03-27 16:01:58 +08:00
    @TomVista 用的函数是这个
    SakuraKuma
        14
    SakuraKuma  
       2019-03-27 16:06:15 +08:00
    同意#5 的缺乏基本热情.
    但我觉得没啥不妥, 9 年的想咸鱼, 公司的想保持技术栈新.
    双向选择而已.
    可能老旧技术的公司活得比新技术的小公司还长呢.

    当然前端变得比变脸还快, 晚点就会一大堆 proxy 了的吧..
    TomVista
        15
    TomVista  
       2019-03-27 16:06:22 +08:00
    @murmur 我的水平也就止步于此了,至于 vue 到底怎么实现的双向绑定,还是弄不明白,要让我自己写一个双向绑定,我肯定能写出来,但是要是先给我一个对象,让我把这个对象的内容双向绑定,不改对象,我是一点思路都没有.....
    DOLLOR
        16
    DOLLOR  
       2019-03-27 16:41:52 +08:00
    我调试的时候,曾经利用 defineProperty,找到属性被莫名覆盖的问题。这点我比较推崇。其他作用,可能因为框架已经帮忙封装,而不能直接感受到好处了
    wuweijia
        17
    wuweijia  
       2019-03-27 17:53:04 +08:00
    面试造火箭,入职写页面
    ericgui
        18
    ericgui  
       2019-03-28 00:38:13 +08:00
    @wuweijia 就是,这招人的公司,考人家的是 vue 原理,但估计也就是写页面而已
    zhzbql
        19
    zhzbql  
       2019-03-28 10:07:17 +08:00
    浏览器里一堆原生对象的 getter,setter 属性不用 definePerty 怎么改?
    murmur
        20
    murmur  
    OP
       2019-03-28 10:11:38 +08:00
    @zhzbql 乱下钩子总归不好的,这个是个甜蜜的毒药
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2791 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:34 · PVG 08:34 · LAX 16:34 · JFK 19:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.