0

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 についても同様のケースが発生します。

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 に答える