Object.defineProperty()的set方法除了用于双向绑定还能干嘛?

对vue双向绑定原理稍有了解的人都知道es5给Object增加了defineProperty这个方法,可以监控对象的变化,vue也用了它来实现双向绑定。那么这个方法除了用于双向绑定还能做什么呢?

最近给一个很复杂的项目迭代维护。这个项目很多早期功能是其他人开发的,中间有很多隐藏的坑。
今天遇到一个bug,经过断点调试相关功能,将问题定位到一个全局变量上,在断点开始的时候它的值是true,在运行了大量代码之后,它的值变成了false。断点跟踪了老长一段距离,都没有头绪。还是在坑爹的ie9下面调试。
于是我想,如何监测到这个变量是在哪里发生变化的呢,发生变化的时候的调用栈是什么样子的呢。然后就想到了defineProperty方法。一试,果然很迅速地找到了发生变化的时候的调用栈。
代码如下:

Object.defineProperty(window, 'expUpdate', {
    get: function() {

    },
    set: function(value) {
        debugger;
    }
});

在公共js中放入上面代码,再运行。
很顺利地定位到了改变这个全局变量的地方。
是在一个富文本编辑器源码里。(我们的项目对富文本编辑器的源码做了一些修改)。
成功定位问题,解决就是分分钟的事了。解决问题时候顺便还解决了一个潜在的逻辑bug。

做程序久了,就会发现程序很多人都能写,但是解bug的能力却是相差很大。一方面要经验,另一方面也要对技巧的总结和对技术的运用思考。在不同的场景使用不同的方法,可以大大提高定位问题的准确性和解决问题的效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值