Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js中的函数导出在VSCode中显示为属性_Javascript_Node.js_Visual Studio Code - Fatal编程技术网

Javascript Node.js中的函数导出在VSCode中显示为属性

Javascript Node.js中的函数导出在VSCode中显示为属性,javascript,node.js,visual-studio-code,Javascript,Node.js,Visual Studio Code,这在技术上并没有错,所以我没有在GitHub上作为bug进行归档,但似乎应该有更好的行为(或者可能有更好的方式定义导出) 假设我有: function one() { // do stuff } function two() { one() } module.exports = {one, two}; 当我需要此模块时,在另一个文件中,one和two显示为对象属性(蓝色图标)。VSCode似乎没有认识到它们实际上是函数。如果定义命名的匿名函数,例如module.export

这在技术上并没有错,所以我没有在GitHub上作为bug进行归档,但似乎应该有更好的行为(或者可能有更好的方式定义导出)

假设我有:

function one() {
    // do stuff
}

function two() {
    one()
}

module.exports = {one, two};
当我需要此模块时,在另一个文件中,
one
two
显示为对象属性(蓝色图标)。VSCode似乎没有认识到它们实际上是函数。如果定义命名的匿名函数,例如
module.exports={one:function(){},则这是相同的行为这样写很有意义。但是,如果我只是想让一个函数在导出中显示为函数,那么我似乎能让它工作的唯一方法是:

module.exports = {
   one() { /* do stuff */ },
   two() { /* do more stuff */},
};
这在某些情况下有效,但如果
two
需要调用
one
并且两个函数都需要导出,则必须使用
This.
访问其他成员

如何在一个模块中定义一组可以相互利用的函数,并将它们全部导出,以便它们在VSCode的其他模块中显示为函数(紫色图标)

编辑
这里的问题是让VSCode在从其他模块需要函数时识别并提示函数本身,而不是将它们显示为模块的“属性”。

这种方法可以让您导出函数并调用本地函数:

let self = {
  one: function() {
    return 'one';
  },
  two: function() {
    return self.one();
  }
};
module.exports = self;
另一方面,如果您的蓝色图标仍然没有显示,您可以命名您的功能:

let self = {
  one: function SayOne() {
    return 'one';
  },
  two: function CallOne() {
    return self.one();
  }
};
module.exports = self;
最后,您可以通过以下方式导入函数:

const { one, two } = require('./your_file');
console.log(two());

从Javsscript的观点来看,您的两个
模块.exports
语句之间没有任何区别。他们都完成了完全相同的事情。两者都在导出具有两个属性的对象,每个属性的值都是一个函数。所以,我想这完全是一个关于VSCode中蓝色图标的问题。从Javascript的角度来看,两者的工作原理相同,但是在VSCode中,在第一个示例中,它用蓝色图标将它们标记为(属性),在第二个示例中,用紫色图标将它们标记为(方法)。当您从同一个文件中调用函数时,它们的标签为紫色(function),因此似乎应该有一种方法使导出的函数看起来相同,以区分导出的变量和函数。您的第一个示例确实避免了在导入时对函数进行结构分解时丢失
上下文,并保持正确的智能感知,所以我会接受这个答案。仍然令人恼火的是,仅在模块范围内定义函数,然后导出它们,VSCode无法确定它们是函数,而不仅仅是module.exports对象的属性。我想我会在VSCode的Github上开一张票。