首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >论connect模块中的res._renderHeaders函数

论connect模块中的res._renderHeaders函数
EN

Stack Overflow用户
提问于 2013-05-25 22:04:02
回答 2查看 56关注 0票数 0

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

代码语言:javascript
运行
复制
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也出现了类似的情况。

EN

回答 2

Stack Overflow用户

发布于 2013-05-26 00:12:44

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

代码语言:javascript
运行
复制
// store reference to 'old' implementation
_renderHeaders = res._renderHeaders;
...
// create a new implementation
res._renderHeaders = function(){
  ...
  // which calls the old implementation
  return _renderHeaders.call(this);
};
票数 0
EN

Stack Overflow用户

发布于 2013-05-26 16:23:48

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16750330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档