如果修改原型,是否有任何不良副作用

Is there any bad side-effect if modify prototype?

本文关键字:任何 不良 副作用 是否 修改 原型 如果      更新时间:2023-09-26

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

表达/响应.js

var res = module.exports = {
  __proto__: http.ServerResponse.prototype
};
res.redirect = function (url) {
  ...
}

和快递/中间件.js

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

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

http.ServerResponse.prototype.redirect = function(url) {
  ...
}
我不知道

是否有我不知道为什么表达改变覆盖的样式。

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

但是,函数的prototype属性是语言的标准部分,其使用始终是安全的。

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

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

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

快速方式确实会带来性能损失,

但据推测,以任何其他方式执行此操作的性能损失会更差。