如果修改原型会有什么不好的副作用吗?

时间:2012-05-12 15:13:28

标签: javascript node.js

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

快递/ 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) {
  ...
}

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

2 个答案:

答案 0 :(得分:0)

请注意__proto__ pseudo-attribute is non-standard所以它的使用从来都不合适;此外,根据Mozilla开发者网络(MDN),它现在被视为“已弃用”。

但是,prototype property of Functions是该语言的标准部分,其使用始终是安全的。

始终使用MyFunction.prototype,绝不使用myObject.__proto__

答案 1 :(得分:0)

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

如果您在节点进程中运行多个框架和服务器,或者想要与可能正在执行此操作的其他人共享您的代码,那可能是一个问题,因为另一个框架可能还会添加重定向功能并且会发生冲突。一般来说,修改你不拥有的对象被认为是不好的风格。

Express方式确实带有performance penalty,但可能会因为其他任何方式而导致性能下降。