获取 Node.js 中类的可用函数列表

Jef*_*eek 5 javascript object node.js

我试图找到一种干净、简单的方法来使用命令行简单地获取 Node.js 中类的可用函数列表。

根据我之前偶然发现的网络搜索Object.getOwnPropertyNames(),但似乎这个功能不一致,否则我不明白为什么它适用于某些类但不适用于其他类。

让我们看一个例子,也许有人可以提供帮助。目前,本示例的 node -v 输出 v4.4.5。

首先,假设我想获取 Math 类的函数列表。从节点控制台,这效果很好,我得到:

[root@localhost /]# node
> Object.getOwnPropertyNames(Math)
[ 'E',
  'LN10',
  'LN2',
  'LOG2E',
  'LOG10E',
  'PI',
  'SQRT1_2',
  'SQRT2',
  'random',
  'abs',
  'acos',
  'asin',
  'atan',
  'ceil',
  'exp',
  'floor',
  'log',
  'round',
  'sqrt',
  'atan2',
  'pow',
  'max',
  'min',
  'imul',
  'sign',
  'trunc',
  'tanh',
  'asinh',
  'acosh',
  'atanh',
  'hypot',
  'fround',
  'clz32',
  'cbrt',
  'cos',
  'sin',
  'tan',
  'sinh',
  'cosh',
  'log10',
  'log2',
  'log1p',
  'expm1' ]
>
Run Code Online (Sandbox Code Playgroud)

凉爽的。这样可行。

现在,由于 Node.js 更多的是关于服务器端编程,让我们看看同样的事情是否适用于 Node.js 的几乎每个“hello world”类型示例中使用的公共类:http.Server

让我们尝试同样的事情:

> Object.getOwnPropertyNames(http.Server)
[ 'length', 'name', 'prototype', 'super_' ]
Run Code Online (Sandbox Code Playgroud)

嗯....将其与此处的文档进行比较,似乎它缺少基本的东西,例如server.close()server.listen()。进一步查看文档,这个类是 的子类net.Server,所以也许我必须查看该类的方法。让我们看看这是否有效:

> Object.getOwnPropertyNames(net.Server)
[ 'length', 'name', 'prototype', 'super_' ]
Run Code Online (Sandbox Code Playgroud)

嗯...如果我们与net.Server的文档进行比较,我们会缺少诸如server.address()server.getConnections()等基本功能。

谁能帮我理解:

(a) 为什么getOwnPropertyNames似乎显示了某些类的所有方法,但不显示其他类的所有方法,并且... (b) 是否有另一种“官方”方法可以简单地列出 Node.js 中对象的可用函数,而无需阅读 API文档来获取这样的列表?

Mat*_*Way 1

如果您查看文档,您会看到getOwnPropertyNames

如果您只需要可枚举属性,请参阅 Object.keys() 或使用 for...in 循环(尽管请注意,这将返回未直接在该对象上找到的可枚举属性,但也会返回该对象的原型链,除非后者使用 hasOwnProperty() 进行过滤。

这意味着getOwnPropertyNames()&Object.keys()只会返回对象本身的可枚举属性,并且不会为您提供有关对象原型的任何信息。

因此,似乎没有内置函数可以实现您想要的功能,因此您必须自己编写代码。例如:

for (var prop in obj) {
    console.log('obj.' + prop + ' = ' + obj[prop]);
}
Run Code Online (Sandbox Code Playgroud)

注意:您可以创建自己的实用程序库,包装这个想法,以便您可以将其包含在您想要运行它的任何项目中。