在 .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' }
放入根文件中,然后将其 require 到您的根文件中。这种情况的区别在于您可以在根文件中将其命名为您想要的任何名称。