在JavaScript中使用名称空间

在JavaScript中使用名称空间,javascript,namespaces,Javascript,Namespaces,我在JavaScript中有一个名称空间实用程序,它看起来有点像这样: var Utilities = Utilities || { printTest: function() { print("test"); } } 我可以使用Utilities.printTest()调用我的printTest函数我希望它类似于C++如何使用< >使用< /COD>语句实现代码中的命名空间。JavaScript有类似的功能吗 谢谢不,那是不可能的。最接近的方法(假设这个上下文不重要)是将函数分配给

我在JavaScript中有一个名称空间
实用程序
,它看起来有点像这样:

var Utilities = Utilities || {
    printTest: function() { print("test"); }
}
我可以使用
Utilities.printTest()调用我的
printTest
函数
var Utilities.....
using Utilities;
printTest();
<> >我希望它类似于C++如何使用< <代码> >使用< /COD>语句实现代码中的命名空间。JavaScript有类似的功能吗


谢谢

不,那是不可能的。最接近的方法(假设
这个
上下文不重要)是将函数分配给各个变量

var printTest = Utilities.printTest;
var otherMethod = Utilities.otherMethod;
...

不,那是不可能的。最接近的方法(假设
这个
上下文不重要)是将函数分配给各个变量

var printTest = Utilities.printTest;
var otherMethod = Utilities.otherMethod;
...

JavaScript中没有像C#或其他语言中那样的“using”关键字

您可以通过客户端的脚本标记拉入模块或库。 Node.js有一个“require”关键字,您可以在Node.js应用程序中使用它:
require(“主体解析器”)


您可以将该语句放在文件的顶部,Node.js将查找该模块的文件结构。它的方法随后在该文件中可用

JavaScript中没有像C#或其他语言中那样的“使用”关键字

您可以通过客户端的脚本标记拉入模块或库。 Node.js有一个“require”关键字,您可以在Node.js应用程序中使用它:
require(“主体解析器”)


您可以将该语句放在文件的顶部,Node.js将查找该模块的文件结构。它的方法随后在该文件中可用

以下内容将提供类似的功能(当定义了
时),但有一个原因
使用
在C++中很少使用:它通常会首先破坏名称空间的目的。名称空间的存在是为了隔离设计的独立部分,如果它们需要像这样混合在一起,那么可能需要考虑不同的结构。也就是说,这个关键词存在是有原因的,所以肯定有合法的用途

function using(namespace) {
  if (typeof namespace === 'object' && this !== null && this !== undefined) {
    for (var i in namespace) {
      this[i] = namespace[i]
    }
  }
}

using.bind(this,myNamespace);//attaches the values of namespace to this

同样,大多数情况下并不推荐使用这种模式。

以下内容将提供类似的功能(当定义了
时),但有一个原因是
在C++中很少使用
:它通常会首先破坏拥有名称空间的目的。名称空间的存在是为了隔离设计的独立部分,如果它们需要像这样混合在一起,那么可能需要考虑不同的结构。也就是说,这个关键词存在是有原因的,所以肯定有合法的用途

function using(namespace) {
  if (typeof namespace === 'object' && this !== null && this !== undefined) {
    for (var i in namespace) {
      this[i] = namespace[i]
    }
  }
}

using.bind(this,myNamespace);//attaches the values of namespace to this
同样,大多数情况下并不推荐使用这种模式。

:

请注意,严格模式下不允许使用此选项。


请注意,在严格模式下是不允许的。

不,你不能,你拥有的只是一个普通对象不,你不能,你拥有的只是一个普通对象。你有一个语法错误(删除
=>
),这真是令人尴尬。现在改变!它适用于定义了这一点的场景。在JSFIDLE中,它在全局中显然是未定义的,因此我将添加一句关于它的话。(更重要的是,这不是一种模式。)感谢您的关注。虽然全局范围未定义可能是真的,但这并不完全是问题所在。没有前面的
这个。
。使用
语句的
不需要这个。
所以这是一个近似值,但不完全正确。绝对正确。与其说是强迫性的尝试,不如说是强迫性的尝试,这确实不符合最初使用
的精神。你有一个语法错误(删除
=>
),这真是令人尴尬。现在改变!它适用于定义了这一点的场景。在JSFIDLE中,它在全局中显然是未定义的,因此我将添加一句关于它的话。(更重要的是,这不是一种模式。)感谢您的关注。虽然全局范围未定义可能是真的,但这并不完全是问题所在。没有前面的
这个。
。使用
语句的
不需要这个。
所以这是一个近似值,但不完全正确。绝对正确。与其说这是一种强迫性的尝试,还不如说是一种强迫性的尝试,这确实不符合最初使用
的精神。严格模式下不允许这样做是有原因的@MikeC这不是不推荐的-那篇博客文章毫无理由地带有严重的偏见。谢谢,这正是我想要的for@Izkata就我而言,这是不赞成的。这是一个在严格模式下不允许的原因@MikeC这不是不推荐的-那篇博客文章毫无理由地带有严重的偏见。谢谢,这正是我想要的for@Izkata就我而言,这是不赞成的。