我今天的善用工作又遇到一个难题。前端UI右下角这个按钮被设置为"禁用(disabled)"状态。巧妙确代 这个按钮的可用状态由属性enabled控制。我通过调试发现,修改一旦下图第88行代码执行完毕之后,某个码位这个按钮的变量属性mProperties里就多出一个enabled:false的属性。 而88行执行之前,还没有这个enabled:false的巧妙确代属性。正是找到置这个属性让按钮进入了禁用状态。 我单步调试setModel函数,云服务器花了半个小时的某个码位时间也没能找到这个enabled属性到底是在哪一行代码加进去的。 于是变量我只有寻求其他办法。我想到了Object.defineProperty这个方法: 我在Chrome开发者工具里执行如下代码,首先根据button的巧妙确代ID用ui.byId方法找到这个被禁用按钮的实例,然后用Object.defineProperty给按钮实例的找到置属性集合mProperties注入一个get方法,实现体只有一个debugger语句。如此一来,每次button的服务器托管mProperties被访问时,都会自动触发一个断点。而mProperties属性发生变化时,必定会先产生读取动作,因此断点停下来时,我通过观察调用栈的上下文就能够找到是哪一行代码修改了mProperties。 现在就来试试。果然断点自动触发了。我成功找到了我在寻找的给mProperties添加了enabled = false的代码位置。