修改原型有没有什么不好的副作用?

我正在尝试编写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) { ... } 

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

请注意, __proto__伪属性是非标准的,所以它的使用从来没有真正适合; 而且,根据Mozilla开发者networking(MDN)的说法,它现在被认为是“被弃用的”。

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

总是使用MyFunction.prototype ,从不使用myObject.__proto__

执行Express方式只会修改ServerResponse实例的响应对象。 您的方法将全局地将redirectfunction添加到由节点进程中的任何服务器创build的每个响应。

如果您在节点进程中运行多个框架和服务器,或者想与其他可能这样做的人分享您的代码,这可能是一个问题,因为另一个框架也可能会添加一个redirectfunction,并且会有冲突。 一般来说,修改不属于自己的对象被认为是不好的风格。

Express方式确实带来了性能上的损失 ,但是可能会有更糟的性能损失。