使用JavaScript给对象修改注册监听器

我们在开发一些大型前端项目时,会遇到这样一种情况,某个变量上有个字段。我们想知道是哪一段程序修改了这个变量上的字段。比如全局变量window上我们自定义了一个新字段_name,我们想知道到底有哪些程序给这个字段赋了值。

一行行地调试肯定太费时间了。如果window这个变量的_name字段被程序赋值时,能执行我们自己实现的一个监听器,这样不就方便多了么?

监听器的实现很简单:


<html><script>"use strict";function test(){  Object.defineProperty(window, "_name", {  get : function(){ console.log("gett is called ") },  set : function(newValue){      debugger;      console.log("_name is filled!!!!");
  },  enumerable : true,  configurable : true});for( var i = 0; i < 2; i++)   console.log(i);window._name = "2";
};
test();</script>

使用Object对象自带的方法defineProperty, 第一个参数为要监听的对象window,第二个参数为要监听的对象字段名称,_name。

第三个参数是一个对象,属性为set,意思是我们想监听window._name被赋值的这个事件。属性set的值为一个JavaScript函数,即我们自己定义的监听器。这个监听器,当window._name被其他JavaScript函数修改之后,就会触发。

webp

测试一下,在浏览器里执行上述代码,发现断点按照我们期望的被触发了:

webp

从调用栈也能发现确实是window._name = "2"这一行代码触发的断点,我们自己注册的属性修改监听器确实工作了。

webp

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:


webp

webp


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24475491/viewspace-2213832/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24475491/viewspace-2213832/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用JavaScript监听SVG的交互事件,你可以使用以下步骤: 1. 获取SVG元素:首先,使用JavaScript的`querySelector`或`getElementById`等方法获取到你想要监听事件的SVG元素。例如,可以使用`document.querySelector('#svgId')`来获取具有特定ID的SVG元素。 2. 添加事件监听器使用`addEventListener`方法为SVG元素添加事件监听器。通过指定要监听的事件类型(例如click、mouseover等)和相应的处理函数,来定义你希望在事件触发时执行的操作。例如,可以使用以下代码为SVG元素添加点击事件监听器: ```javascript const svgElement = document.querySelector('#svgId'); svgElement.addEventListener('click', function(event) { // 在这里编写处理点击事件的代码 }); ``` 3. 在事件处理函数中执行操作:在事件处理函数中编写你希望在事件触发时执行的操作。根据具体需求,你可以更改SVG元素的属性、样式,或执行其他操作。例如,以下代码将在点击SVG元素时将其颜色更改为红色: ```javascript const svgElement = document.querySelector('#svgId'); svgElement.addEventListener('click', function(event) { svgElement.setAttribute('fill', 'red'); }); ``` 4. 可选:根据需要,你可以使用SVG元素的其他事件(如`mouseover`、`mouseout`等)进行更多的交互操作。同时,你还可以使用`event`对象来获取关于事件的更多信息,如鼠标位置、键盘按键等。 请注意,以上只是一个简单的示例,具体的事件处理逻辑和操作应根据你的具体需求进行调整。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值