• 使用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函数修改之后,就会触发。

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

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

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

  • 相关阅读:
    网络攻击与防御 实验1
    java继承 、方法重写、重写toString方法
    递归算法
    加标签的continue用法
    程序员,你应该知道的数据结构之栈
    SpringBoot 内部方法调用,事务不起作用的原因及解决办法
    程序员,你应该知道的数据结构之哈希表
    程序员,你应该知道的数据结构之跳表
    程序员,你应该知道的二分查找算法
    程序员,你应该知道的基础排序算法
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/9819014.html
Copyright © 2020-2023  润新知