我可以使用http.ServerResponse作为node.js中的原型吗?

我无法得到这个工作:

var proxyResponse = function(res) { return Object.create(res); }; 

调用此方法返回的对象上的标准响应方法不起作用,例如:

 http.createServer(function(req, res) { res = proxyResponse(res); res.writeHead(200, {"Content-Type": "text/html"}); res.end("Hallelujah! (Praise the Lord)"); }).listen(8080); 

服务器挂起。 有人可以解释我做错了什么?

从MDC :

 Object.create(proto [, propertiesObject ]) 

这创build了一个新的对象,其原型是原型的,对象本身没有任何定义:

 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被覆盖,事实并非如此,因为每个res是它自己引用不同对象的variables。