С MDC :
Object.create(proto [, propertiesObject ])
Это создает новый объект, прототип которого является proto, сам объект не имеет ничего определяющего:
res.foo = function() {
console.log(this);
}
res.foo();
res = proxyResponse(res);
res.foo();
Результат:
{ socket:
{ fd: 7,
type: 'tcp4',
allowHalfOpen: true,
_readWatcher:
{ socket: [Circular],
....
{}
Так почему же он не выдает ошибку и не взрывается? Помимо поиска и настройки испорченного свойства, есть одна причина, по которой он не работает.
Хотя ваш новый объект ссылается на все тот же объект, что и старый, сам по себе НЕ старый.
В: https://github.com/ry/node/blob/a0159b4b295f69e5653ef96d88de579746dcfdc8/lib/http.js#L589
if (this.output.length === 0 && this.connection._outgoing[0] === this) {
Это завершает запрос, this
является новым объектом, но this.connection._outgoing[0]
все еще ссылается на старый объект, поэтому запрос никогда не завершается и сервер зависает.
Я все еще не знаю, чего вы пытаетесь достичь здесь, так как здесь не имеет смысла использовать Object.create
, если вы беспокоитесь о перезаписи res в случае других запросов, это не case, поскольку каждое res - это собственная переменная, которая ссылается на другой объект.