如何检测新全局变量的创建?

Sri*_*ala 5 javascript global-variables javascript-events

我想注意在 Javascript 中创建新的全局变量,以便在创建全局变量时,会触发一个事件。

我听说过 watch() 函数,但这仅用于监视特定的变量名称。我想要一个大杂烩。

Dmi*_*ich 6

如果您已经知道哪些名称污染了您的全局命名空间(请参阅在 javascript 中拦截全局变量定义),您可以使用此技巧来确定它何时实际发生:

window.__defineSetter__('someGlobalVar', function() {
    debugger;
});
Run Code Online (Sandbox Code Playgroud)

运行此程序时,请务必打开开发人员工具。显然,只有当您的浏览器支持时才有效__defineSetter__,但对于现代浏览器来说也是如此。另外,完成后不要忘记删除调试代码。

在这里找到的。


sel*_*bie 3

我不知道如何在创建 var 后立即“按需”进行这项工作,但我可以建议一种轮询方法。在浏览器窗口中,所有全局的都成为全局“窗口”对象的成员。(因为从技术上讲,“窗口”是“全局对象”)。所以你可以做类似下面的事情:

1)枚举窗口上的所有属性

window.proplist = window.proplist || {};
for (propname in window) {

    if (propname !== "proplist") {
      window.proplist[propname] = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

2) 设置一个计时器来定期“轮询”窗口以获取新属性

setInterval(onTimer, 1000);
Run Code Online (Sandbox Code Playgroud)

3) 唤醒定时器回调并寻找新的 props

function onTimer() {
        if (!window.proplist) {
            return;
        }

        for (propname in window) {

              if (!(window.proplist[propname])) {
                 window.proplist[propname] = true;
                 onGlobalVarCreated(propname);
              }
        }
}
Run Code Online (Sandbox Code Playgroud)