温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用Object.defineProperty找到修改某个变量准确代码位置的案例

发布时间:2021-02-05 15:11:47 来源:亿速云 阅读:137 作者:小新 栏目:web开发

这篇文章主要介绍使用Object.defineProperty找到修改某个变量准确代码位置的案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

语法

Object.defineProperty(obj, prop, descriptor)

参数

  • obj 需要定义属性的对象。

  • prop 需被定义或修改的属性名。

  • descripter 需被定义或修改的属性的描述符。

发现问题

最近的工作又遇到一个难题。前端UI右下角这个按钮被设置为"禁用(disabled)"状态。

使用Object.defineProperty找到修改某个变量准确代码位置的案例

这个按钮的可用状态由属性enabled控制。我通过调试发现,一旦下图第88行代码执行完毕之后,这个按钮的属性mProperties里就多出一个enabled:false的属性。

使用Object.defineProperty找到修改某个变量准确代码位置的案例

而88行执行之前,还没有这个enabled:false的属性。正是这个属性让按钮进入了禁用状态。

使用Object.defineProperty找到修改某个变量准确代码位置的案例

我单步调试setModel函数,花了半个小时的时间也没能找到这个enabled属性到底是在哪一行代码加进去的。

解决方法

于是我只有寻求其他办法。我想到了Object.defineProperty这个方法:

使用Object.defineProperty找到修改某个变量准确代码位置的案例

使用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;}});

使用Object.defineProperty找到修改某个变量准确代码位置的案例

现在就来试试。果然断点自动触发了。我成功找到了我在寻找的给mProperties添加了enabled = false的代码位置。

使用Object.defineProperty找到修改某个变量准确代码位置的案例

使用Object.defineProperty找到修改某个变量准确代码位置的案例

以上是“使用Object.defineProperty找到修改某个变量准确代码位置的案例”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI