Javascript 在Dojo中引用非widget对象时不带;“污染”;全局名字空间

Javascript 在Dojo中引用非widget对象时不带;“污染”;全局名字空间,javascript,dojo,global-variables,Javascript,Dojo,Global Variables,跟踪和引用一般JavaScript对象(最有可能是Dojo声明的对象)的干净最佳实践是什么?这些对象可能已在应用程序的一个区域(读取模块)中声明,但需要在另一个区域中使用?我们假设这里是AMD 正如Dojo的“非小部件”部分所述: 。。。常规对象不像基于Dijit的小部件那样具有注册表,因此为了在实例化它们之后能够引用它们,必须在全局范围内创建对它们的引用 全球范围?嗯?!最大的问题之一是不赞成随意使用全局名称空间: “现代”Dojo的核心概念之一是全局名称空间中的东西是不好的。原因有很多,但在

跟踪和引用一般JavaScript对象(最有可能是Dojo声明的对象)的干净最佳实践是什么?这些对象可能已在应用程序的一个区域(读取模块)中声明,但需要在另一个区域中使用?我们假设这里是AMD

正如Dojo的“非小部件”部分所述:

。。。常规对象不像基于Dijit的小部件那样具有注册表,因此为了在实例化它们之后能够引用它们,必须在全局范围内创建对它们的引用

全球范围?嗯?!最大的问题之一是不赞成随意使用全局名称空间:

“现代”Dojo的核心概念之一是全局名称空间中的东西是不好的。原因有很多,但在复杂的web应用程序中,全局名称空间很容易被各种各样的代码污染[…]。这意味着在“现代”Dojo中,如果您将要访问全局名称空间中的某些内容,请停止,因为您做了一些错误的事情

此外,根据该指南:

再次,在我之后重复“全局名称空间不好,全局名称空间不好,我不会使用全局名称空间,我不会使用全局名称空间”


有鉴于此,有没有其他流行的想法,比如在应用程序的上下文中存在一个通用对象注册表?Dojo定义一个模块,其唯一目的是混合引用整个应用程序中使用的对象,这是可行的还是显而易见的?

有很多方法可以避免全局范围。如果你能提供一个你正在尝试做的事情的例子,那会很有帮助。我只是想要一种通过控制台与我的应用程序中的某些对象进行交互的便捷方式。我经常键入
widget=dijit.byId(“”)
,然后动态读取/写入该
小部件的属性。由于可以从全局可访问的
dijit
对象访问
dijit.registry
(目前),因此使用“存储”在那里的小部件非常容易。我正在寻找一种干净的方法,允许轻松引用某些感兴趣的非小部件对象,无论引用代码是在应用程序的其他地方还是在控制台中。我预计会用到require()。在这种情况下,创建一个对对象进行散列的dojo模块。无论何时创建元素,都将其添加到该模块中。然后,您可以使用dijit.byId(“my\u hash\u 0”).get(“customobject”)之类的内容检索它