如果修改原型,是否有任何不良副作用
Is there any bad side-effect if modify prototype?
我正在尝试编写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 实例的响应对象。 您的方法会将重定向函数全局添加到节点进程中任何服务器创建的每个响应。
如果您在节点进程中运行多个框架和服务器,或者想与可能这样做的其他人共享您的代码,这可能是一个问题,因为另一个框架也可能添加重定向功能并且会有冲突。 通常,修改不属于您的对象被认为是不良样式。
快速方式确实会带来性能损失,但据推测,以任何其他方式执行此操作的性能损失会更差。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- jQuery中是否内置了任何字符串格式化函数
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 有任何可能将facebook实时信使整合到一个网站中
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- AJAX:$_GET不返回任何值
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 将事件处理程序绑定到任何可能的事件
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- document.styleSheets不返回任何内容
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- Graphiti中是否有任何工具提示功能
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 在解析对象.save()中;没有返回任何原因
- 任何浏览器都不支持javascript函数
- 如果修改原型,是否有任何不良副作用
- 两次引用同一个js文件是否有任何不良影响?