向窗口对象-js添加新属性时得到通知

Get notified when added new property to window object - js

本文关键字:属性 通知 对象 窗口 -js 添加 新属性      更新时间:2023-09-26

我需要监听一些事件(当然如果它存在的话),以了解何时向window对象添加了新属性。这可能吗?

例如:

我在应用程序中有一段代码不知道某个库公开了什么全局变量(例如underscore.js,它公开了全局_而不是underscore)。需要通知我新的属性已分配给window

有两种方法可以尝试做到这一点,但都不是一个好的选择。

  1. 可以使用setInterval检查对window对象的更改。这将是缓慢的,并且从向window添加新属性到您的代码注意到它之间会有一段延迟。以下是一些代码,显示了一种方法:http://jsbin.com/vubew/1/edit?js,控制台

    (function(){
      'use strict';
      var keys = Object.keys(window).join();
      setInterval(function(){
        var newKeys = Object.keys(window).join();
        if (newKeys !== keys) {
          console.log('`window` changed');
          keys = newKeys;
        }
      }, 100);
    })();
    
  2. 您可以使用ES7的Object.observe方法。不幸的是,目前只有Chrome支持它(在实验性标志后面)。

一旦您确定其中一个方法发生了更改,您就会生成一个代码将要侦听的事件。