我正在研究连接模块中的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也出现了类似的情况。
发布于 2013-05-26 00:12:44
它不是在调用自己,而是在调用之前的实现:
// 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-26 16:23:48
好的。让我们在这里说得更清楚一些。//它调用旧的实现返回_renderHeaders.call(this);
上面的代码使用当前的res (http.ServerResponse.prototype)调用旧的实现,在旧的实现中是"this“。但是,如果编写为return _renderHeaders(),那么旧实现中的"this“将是OutgoingMessage.prototype吗?
https://stackoverflow.com/questions/16750330
复制相似问题