什么时候可以将属性附加到窗口
When is it okay to attach properties to window?
浏览时,我经常查看网页的源代码,以检查某些事情是如何实现的。
我经常看到的一件事是:window.myApp.apiKey = 12345;
或window.myApp.welcomeMsg = "Hello there!";
属性附加到窗口对象是一种不好的做法(就像这个公认的答案中所解释的那样),但看起来myApp
被用作一种命名空间,因为它通常是品牌名称,它不太可能与任何东西发生冲突。
仍然 - 这样做怎么可以,有什么指标吗?(即,当我知道项目中不会使用第 3 个库时,它们在现实生活中可能会快速变化)。
一般来说,我会使用以下方法...
if (typeof window['myApp']=='undefined') {alert('its okay.');}
else {alert('Error: native API added, have AJAX message server, email you.');}
。当然,你是否应该这样做是主观的,我个人使用...
var option = new function() {this.name = '';}
option.whatever = 'this string';
alert(option.whatever);//'this string'
。但是,我可能会重命名它并在将来对其进行修改,就像我对所有代码所做的那样。
正如 Ingo Bürk 在评论中指出的那样,似乎最终一切都是window
对象的对象子项,这些对象之间的唯一区别是上下文以及如何与它们交互(例如,您无法删除由 var
定义的对象,尽管您可以delete window.myObject
何时将其定义为window.myObject = 1;
。
有关更深入的信息,请参阅"Javascript 全局变量"的答案。
相关文章:
- 如何在选项卡上定义属性'的主窗口对象
- 单击按钮时的窗口属性
- 在剑道窗口的模板属性中使用AngularJS代码
- 如何在弹出窗口中隐藏文本属性'It’传单上没有填写
- 将地理 JSON 要素属性添加到地图框弹出窗口
- 有没有更好的方法来处理窗口属性&React/Redux中的子组件
- 窗口对象属性返回一个dom节点
- 选项卡的属性对于选项卡式浏览器窗口中的每个选项卡都具有相同的值
- 如何从父窗口添加弹出窗口的某些属性
- 调整窗口大小时更新数据属性
- 使用变量搜索窗口中的属性使用'在'中;
- 全局变量只是“窗口”对象的属性吗?
- 自定义镶边扩展程序中的挂钩窗口属性
- 是否可以在窗口属性上捕获未定义的引用
- JavaScript中未定义与已定义的窗口属性
- 获取所有用户定义的窗口属性
- 如何通过Javascript删除最小化和最大化窗口属性
- 了解顶级窗口属性
- 在窗口属性中实例化的模块模式
- 分配给窗口属性的函数是否仍然可以访问局部变量?