ecmascript 6-如何检测在javascript中设置全局变量
ecmascript 6 - How can I detect when a global variable is set in javascript?
在javascript中,我可以通过使用Object.defineProperty
:来检测全局变量foo
何时被设置(假设它最初未定义)
var foo_;
Object.defineProperty(window, 'foo', {
get: function() {
return foo_;
},
set: function(newFoo) {
console.log('foo set to ' + newFoo);
foo_ = newFoo;
}
});
有更优雅的方法吗?一个缺点是我不能对同一个属性调用Object.defineProperty
两次。覆盖整个属性只是为了检测它何时被定义似乎有点过头了。
我可以以某种方式使用代理吗?我觉得我必须制作一个针对窗口对象的代理。。。这样有效吗?
有更优雅的方法吗?
不是。也许您可以(应该)在闭包中隐藏_foo
,而不是创建另一个全局变量。
一个缺点是我不能对同一个属性调用
Object.defineProperty
两次。覆盖整个属性只是为了检测它何时被定义似乎有点过头了。
唯一的问题是您忘记传递configurable: true
选项。
我可以以某种方式使用代理吗?
没有。不能用代理替换全局对象。您唯一能做的就是将所有代码封装在with (new Proxy(…)) { … }
块中。
您可能也喜欢
var _bar;
window.__defineGetter__("bar", function(){return this._bar});
window.__defineSetter__("bar", function(v){console.log("bar set to:",v); this._bar = v;});
相关文章:
- 通过Javascript设置Telerik RadTreeView属性,如OnClientNodeExpanded
- 使用javascript设置iframe的高度
- 通过JavaScript设置表单目标
- 如何确定相对较新版本的IE的高度和宽度(IE8不喜欢从JavaScript设置这种样式吗?
- 通过JavaScript设置的表单字段的值不会作为$_POST的一部分传递给PHP脚本
- 如何在Internet Explorer中使用javascript设置cookie
- Javascript设置日期不起作用,显示错误的时间
- iOS Safari Javascript设置超时问题
- 使用Javascript设置库中图像包装器的宽度
- 如何检查日期选择器和时间选择器元素是否使用JQuery/Javascript设置
- 如何使用javascript设置元素旋转和动态观察的动画
- 在 PHP 块中使用 Javascript 设置 HTML 文本框的值(使用 echo)
- 通过javascript设置IE特定的css样式
- Javascript-设置cookie并拉入ID
- ASP从Javascript设置控件值
- 尝试使用window.innerHeight和Javascript设置图像高度
- 使用JavaScript设置整个页面的字体大小
- 使用纯Javascript设置最小高度属性
- 如何通过javascript设置支柱列表2
- 使用 JavaScript 设置 的点击