修改原型prototype会有什么风险?
曾经看到过修改prototype这种做法不好,本人实际使用感觉非常方便,有什么不好的?例如:要在所有的react组件或vue组件中,做数字的格式化,直接如下:
String.prototype.toNum = Number.prototype.toNum = function(s) {
}就能在所有组件中的任何字段,方便的调用toNum方法了,无需每个组件引入方法
回复
1个回答
test
2024-07-05
知道为什么JS的String、Array的包含方法不像其他语言那样叫,而是叫a.contains()a.includes()吗?因为曾经有个大聪明(MooTools),在String.prototype上挂了个非标准的contains(),结果标准委员会只好改名为includes,避免破坏那些旧的contains()的行为,导致使用MooTools的网站崩溃。
知道为什么JS的groupBy长这个样子:
Object.groupBy(array, (num, index) => {
return num % 2 === 0 ? 'even': 'odd';
})而不是这个样子:
array.groupBy((num, index) => {
return num % 2 === 0 ? 'even': 'odd';
})因为当年有个大聪明(Sugar),在Array.prototype上挂了个非标准的groupBy(),结果标准委员会只好改为静态方法Object.groupBy,避免破坏那些旧的groupBy()的行为,导致使用Sugar的网站崩溃。
类似的还有Array.prototype.flat和Array.prototype.flatten之争,不一一列举了。
标准委员会每当要给JS添加新功能时,都会考虑这些新功能会不会破坏当前环境的兼容性。如果影响较大,他们就会考虑做出让步。但是,如果你没那么大影响力,他们就不会考虑对你的兼容性影响。你就要自己承担将来遇到breaking changes的风险了。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容