什么时候可以将属性附加到窗口

When is it okay to attach properties to window?

本文关键字:窗口 属性 什么时候      更新时间:2023-09-26

浏览时,我经常查看网页的源代码,以检查某些事情是如何实现的。

我经常看到的一件事是: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 全局变量"的答案。