手机版

如何使用Object.defineProperty巧妙地找到修改变量的确切代码位置

时间:2021-08-29 来源:互联网 编辑:宝哥软件园 浏览:

前言

本文主要是关于使用Object.defineProperty来找出修改变量的确切代码位置,并分享给大家参考。下面的话就不多说了,我们来看看详细的介绍。

语法

Object.defineProperty(obj,prop,descriptor)

参数

Obj需要定义属性的对象。属性要定义或修改的属性的名称。描述符要定义或修改的属性的描述符。发现问题

最近的工作遇到了另一个难题。前用户界面右下角的这个按钮被设置为“禁用”。

该按钮的可用状态由属性enabled控制。通过调试,我发现下图第88行的代码一旦执行,这个按钮的属性mProperties中就会有一个enabled:false的属性。

在执行第88行之前,没有enabled:false属性。正是这个属性使按钮被禁用。

我进入了setModel函数,花了半个小时才发现启用的属性被添加到了哪一行代码中。

解决办法

所以我必须找到其他方法。我想到了对象的方法。定义属性:

我在Chrome开发工具中执行了以下代码。首先根据按钮的Id找到了禁用按钮的实例,用ui.byId方法,然后用Object.defineProperty在按钮实例的属性集mProperties中注入了get方法,实现只有一个调试器语句。这样,每次访问按钮的属性时,都会自动触发一个断点。当mProperties的属性改变时,首先会生成一个读操作,所以当断点停止时,我可以通过观察调用堆栈的上下文来找出哪一行代码修改了mProperties。

var ui=sap . ui . GetCore();var button=ui . byid(' button 97 dxvdvkuawkygk3yqvram _ 64 ');object . defineperoperty(button,' mProperties ',{ get : function(){ debugger;}});

现在试试。果然,断点自动触发了。我成功地找到了我正在寻找的代码位置,并将enabled=false添加到mProperties中。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:如何使用Object.defineProperty巧妙地找到修改变量的确切代码位置是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。