2

我正在尝试编写nodejs的路由框架,我需要为ServerRequest和ServerResponse添加一些帮助方法。我注意到快递已经改变了从修改原型到

快递/response.js

var res = module.exports = {
  __proto__: http.ServerResponse.prototype
};

res.redirect = function (url) {
  ...
}

和 express/middlewares.js

expressInit = function(req, res, next) {
  // ...
  res.__proto__ = app.response;
  next()
}

但在我的框架中,我只是喜欢做简单的事情:

http.ServerResponse.prototype.redirect = function(url) {
  ...
}

我不知道是否有什么我不知道为什么要更改覆盖的样式。

4

2 回答 2

0

请注意,__proto__伪属性是非标准的,因此它的使用从来都不是真正合适的;此外,根据 Mozilla 开发者网络 (MDN),它现在被视为“已弃用”。

然而,prototype函数的属性是语言的标准部分,它的使用总是安全的。

永远使用MyFunction.prototype,永远不要使用myObject.__proto__

于 2012-05-23T15:15:09.453 回答
0

以 Express 方式执行此操作只会修改该 ServerResponse 实例的响应对象。您的方法会将重定向功能全局添加到节点进程中任何服务器创建的每个响应中。

如果您在节点进程中运行多个框架和服务器,或者想与可能这样做的其他人共享您的代码,这可能是一个问题,因为另一个框架也可能添加重定向功能并且会发生冲突。通常,修改您不拥有的对象被认为是不好的风格。

Express 方式确实会带来性能损失,但可能会以任何其他方式带来更糟糕的性能损失。

于 2014-11-08T00:03:20.803 回答