JavaScript 中的完全限定名称

Fully-Qualified Names in JavaScript

在 .NET 中,我们有完全限定类型名称的概念。例如,我们有 System.String,其中 System 是名称空间,String 是类型。随后,我们可以拥有成员 FQN,例如System.String.Substring,其中 Substring 是成员。

这个概念是否也适用于基于 JavaScript 的工具?例如,如果我有一个 test npm 包,是否有像 test.someClass.someFunction 这样的东西被认为是有效的每个标准 FQN?

JavaScript 有一个松散的类型系统,所以它基本上不关心类型是什么,除非你告诉它。您也可以根据需要更改类型。

let sample = 5
console.log(typeof sample)
sample = 'ok'
console.log(typeof sample)

node.js 使用模块,这意味着每个文件基本上都是一个导出单例的名称空间,从您的根文件开始。

有很大不同的是,您可以将变量的值设置为函数,重要的是要注意它不会传递此函数的副本。它始终使用对原始对象的实时引用,这是 closure 的基础,如果您从函数内部调用变量。

如果一个函数可以访问一个变量的范围,那么它就会使用它。闭包很难掌握,所以你应该看一些关于它的视频。

const string = function() { return 'hello' };

然后,您可以根据需要运行它,或传递对它的引用:

console.log(string)
console.log(string())

const test = string
console.log(test())

您可以通过进入您的根文件并键入 const System = {} 来创建对象来复制 System.string,然后您可以执行 System.string = 'hello world'.

在节点中,您可以创建另一个名为 System.js 的文件并将 module.exports = { string: 'hello' } 放入您的根文件中。这种情况下的区别在于您可以在根文件中随意调用它。