0

我正在研究连接模块中的 patch.js。有一些代码如下:

var http = require('http')
  , res = http.ServerResponse.prototype
  , setHeader = res.setHeader
  , _renderHeaders = res._renderHeaders
    ...

res._renderHeaders = function(){
    if (!this._emittedHeader) this.emit('header');
    this._emittedHeader = true;
    return _renderHeaders.call(this);
  };

我对 res._renderHeaders 函数定义上的这个奇怪代码感到困惑。作为回报,它正在调用自己?那么它会递归调用自己吗?或者什么是正确的运行过程?

res.writeHead, res._renderHeaders 也出现了类似的情况。

4

2 回答 2

0

它不是在调用自己,而是在调用之前的实现:

// store reference to 'old' implementation
_renderHeaders = res._renderHeaders;
...
// create a new implementation
res._renderHeaders = function(){
  ...
  // which calls the old implementation
  return _renderHeaders.call(this);
};
于 2013-05-25T16:12:44.123 回答
0

好的。让我们在这里说得更清楚。// 调用旧实现 return _renderHeaders.call(this);

上面的代码在旧实现中将当前 res (http.ServerResponse.prototype) 称为“this”的旧实现。但是,如果写成 return _renderHeaders(),那么旧实现中的“this”将是 OutgoingMessage.prototype 吗?

于 2013-05-26T08:23:47.983 回答