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' }
放入您的根文件中。这种情况下的区别在于您可以在根文件中随意调用它。
在 .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' }
放入您的根文件中。这种情况下的区别在于您可以在根文件中随意调用它。