0

我在一个文件夹中有两个不同的 JS 文件。我为第一个 JS 文件提供了一个名称空间, var fooMYNS = {}; 并使用该名称空间声明了一些变量 fooMYNS.newAr = new Array();。现在我推入了数组中的一些元素say {1,2,3,4}。我想在第二个 JS 文件中使用这个数组细节。我如何使用这个命名空间来做到这一点。

注意: Second 仅在第一个 JS 文件之后调用/执行,因此完成了数组分配。

或者我们可以在没有命名空间的情况下做到这一点吗?任何建议都被接受。谢谢。

4

2 回答 2

0

这假设您的问题中至少有一个错字 - {1,2,3,4} 既不是有效数组也不是有效对象。

第一个文件:

var fooMYNS = {};
fooMYNS.newAr = []; // It's faster to use an empty array than the Array constructor.
fooMYNS.newAr = [1,2,3,4]; // Not sure what happens before this that you can't just assign these values to the array in the first place.

第二个文件:

console.log(fooMYNS.newAr); // This outputs to the browser console [1,2,3,4]
于 2012-01-12T19:25:54.397 回答
0

当这两个文件都包含在页面中时,在任何对象之外用 var 声明的任何内容都包含在全局命名空间中,并且可以在任何地方访问。您应该能够从页面上的任何位置轻松访问 fooMYNS。

查看其他问题/答案:如何在 JavaScript 中声明命名空间?

但是,我见过的一种非常好的方式来显式声明应该共享的内容来自 node.js,并且在Coffeescript中得到了很好的实现。如此处所述:如何在 CoffeeScript 中定义全局变量?

root = exports ? this
root.foo = -> 'Hello World'

Coffeescript 自动将所有单个文件包装在一个闭包中,这确实可以帮助您不污染全局 javascript 命名空间。结果,它迫使您使用上面的成语只公开您想要的确切 API。

上面的代码首先检查导出(node.js 全局),否则使用闭包范围(this)并将方法(foo)显式附加到该全局空间。

现在在任何其他文件中,foo都将是全局可访问的,但其他任何未明确设为全局的都不会。

于 2011-07-13T17:02:25.530 回答