Javascript中的NameSpaces - 将它用于两个不同的JS文件

时间:2011-07-13 16:57:12

标签: javascript namespaces javascript-namespaces

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

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

或者我们可以在没有命名空间的情况下完成吗?任何建议都被接受。感谢。

2 个答案:

答案 0 :(得分:0)

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

查看此其他问题/答案:How do I declare a namespace in JavaScript?

然而,我已经看到明确声明应该共享的内容的一种非常好的方式来自node.js并在Coffeescript中得到很好的实现如下所述:How do I define global variables in CoffeeScript?

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

Coffeescript会自动将所有单个文件包装在一个闭包中,这实际上可以帮助您不会污染全局javascript命名空间。因此,它会强制您使用上面的习惯用法来公开您想要的确切API。

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

现在在任何其他文件中,foo将是全局可访问的,但其他任何未显式为全局的内容都不会。

答案 1 :(得分: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]