我正在研究connect模块中的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也会出现类似的情况。
答案 0 :(得分: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);
};
答案 1 :(得分:0)
行。让我们在这里说得更清楚。 //调用旧的实现 return _renderHeaders.call(this);
上面的代码在旧实现中将当前res(http.ServerResponse.prototype)的旧实现称为“this”。 但是,如果写为return _renderHeaders(),那么旧实现中的“this”将是OutgoingMessage.prototype?