善用Object.defineProperty巧妙找到修改某个变量的准确代码位置
我今天的工作又遇到一个难题。前端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。
var ui = sap.ui.getCore(); var button = ui.byId("button97DXvDVKUawkYgK3YQVram_64"); Object.defineProperty(button, "mProperties", { get: function(){ debugger;}});
现在就来试试。果然断点自动触发了。我成功找到了我在寻找的给mProperties添加了enabled = false的代码位置。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
在云环境上使用SLF4J对Java程序进行日志记录
我开发了一个Java应用,部署到云环境上之后,用postman测试发现不能按照我期望的工作,但是返回的消息对我没有任何帮助。 因为部署在云端的应用很难像本地Java应用一样调试,所以我打算用SLF4J在Java代码里添加一些日志,然后查看该Java应用在云端执行产生的日志来排查问题。 SLF4J的全称是Simple Logging Facade for Java, 即简单日志门面,这里的Facade实际上是面向对象的设计模式中的外观模式(Facade pattern)。SLF4J不是具体的日志解决方案,它本身不包含日志记录的具体实现,而是只提供一个外观给各种各样的日志系统,这样就给具体应用提供了很大的灵活度,使得最终用户在部署其应用时可以灵活选用其所希望的日志系统。 SLF4J的使用非常简单,在您的应用代码里将SLF4J的Logger和LoggerFactory导入: import org.slf4j.Logger; import org.slf4j.LoggerFactory; 然后在引用代码里用LoggerFactory获得logger实例: static private Logg...
- 下一篇
《Java8实战》-第五章读书笔记(使用流Stream-02)
付诸实战 在本节中,我们会将迄今学到的关于流的知识付诸实践。我们来看一个不同的领域:执行交易的交易员。你的经理让你为八个查询找到答案。 找出2011年发生的所有交易,并按交易额排序(从低到高)。 交易员都在哪些不同的城市工作过? 查找所有来自于剑桥的交易员,并按姓名排序。 返回所有交易员的姓名字符串,按字母顺序排序。 有没有交易员是在米兰工作的? 打印生活在剑桥的交易员的所有交易额。 所有交易中,最高的交易额是多少? 找到交易额最小的交易。 领域:交易员和交易 以下是我们要处理的领域,一个 Traders 和 Transactions 的列表: Trader raoul = new Trader("Raoul", "Cambridge"); Trader mario = new Trader("Mario", "Milan"); Trader alan = new Trader("Alan", "Cambridge"); Trader brian = new Trader("Brian", "Cambridge"); List<Transaction> transactio...
相关文章
文章评论
共有0条评论来说两句吧...