如何检测 JavaScript 中何时设置了全局变量?

Joh*_*man 6 javascript ecmascript-6

foo在 javascript 中,我可以使用以下方法检测何时设置全局变量(假设它最初未定义) Object.defineProperty

var foo_;
Object.defineProperty(window, 'foo', {
  get: function() {
    return foo_;
  },
  set: function(newFoo) {
    console.log('foo set to ' + newFoo);
    foo_ = newFoo;
  }
});
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方法来做到这一点?一个缺点是我不能Object.defineProperty两次访问同一处房产。仅仅为了检测它的定义时间而覆盖整个属性似乎有点矫枉过正。

我可以以某种方式使用代理吗?我觉得我必须创建一个针对窗口对象的代理......这样有效吗?

Red*_*edu -1

你可能也喜欢

var _bar;
window.__defineGetter__("bar", function(){return this._bar});
window.__defineSetter__("bar", function(v){console.log("bar set to:",v); this._bar = v;});
Run Code Online (Sandbox Code Playgroud)