在节点guide中,它表示:
"传递给处理程序的请求对象实现了 ReadableStream接口。"
然而,之后它也说
"注意:请求对象是IncomingMessage的一个实例。"。
那么request
如何也是IncomingMessage的实例,它也实现了RedableStream接口?
你会如何在JS中实现这一目标?
另外,我认为在JS中没有接口?
答案 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。