某些节点对象是否继承自两个类?

时间:2018-01-06 21:46:11

标签: javascript node.js

在节点guide中,它表示:

  

"传递给处理程序的请求对象实现了   ReadableStream接口。"

然而,之后它也说

  

"注意:请求对象是IncomingMessage的一个实例。"。

那么request如何也是IncomingMessage的实例,它也实现了RedableStream接口? 你会如何在JS中实现这一目标? 另外,我认为在JS中没有接口?

2 个答案:

答案 0 :(得分:1)

如果您查看node.js source for an http incoming message,就会看到:

/* Abstract base class for ServerRequest and ClientResponse. */
function IncomingMessage(socket) {
  Stream.Readable.call(this);
  ....
}

和此:

util.inherits(IncomingMessage, Stream.Readable);

这表明IncomingMessage构造函数继承自Stream.Readable。它还覆盖了一些可读的方法来修改它们的行为。

  

你将如何在JS中实现这一目标?

您将创建自己的对象,从另一个继承。

答案 1 :(得分:0)

一个对象可以“实现”和“成为某个实例”,但该界面仅用于文档目的。

在JS中,作为某事物的实例意味着obj instanceof Something是真的。

在动态语言(如JavaScript)中,实现接口意味着对象应该具有某些方法。这通常称为duck-typing

  

如果IncommingMessage的行为类似于ReadableStream,并且可以用作ReadableStream,则它必须是ReadableStream。