在 .NET 中,我们有完全限定类型名称的概念。例如,我们有System.String
,其中System
是命名空间,并且String
是类型。随后,我们可以拥有成员 FQN,例如System.String.Substring
,Substring
成员在哪里。
这个概念是否也适用于基于 JavaScript 的工具?例如,如果我有一个test
npm 包,是否有类似的东西test.someClass.someFunction
被认为是有效的每个标准 FQN?
在 .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'
.
在 node 中,您可以创建另一个名为 System.js的文件module.exports = { string: 'hello' }
,然后将其放入根文件中,然后将其放入根文件中。在这种情况下,不同之处在于您可以在根文件中随意调用它。