拓展:市面上的 js 工具库有几派做法:
1、支持直接在原始类的 prototype 上直接扩展,以 sugar.js 和 prototype.js 为典型;
2、严格禁止在 prototype 上直接扩展,以 underscore 和 lodash 为典型;
3、中间派,先判断 prototype 是否有重名的,已经有了就不加了,以 es6-shim.js 为代表,使 ES6 能兼容于老浏览器。
但越来越多的实践表明,不推荐在 prototype 上拓展函数。原因是:
1、容易冲突
跟别人或者干脆跟官方更新的函数名冲突。
最著名的例子就是上面介绍的 prototype.js 库,在 prototype 上拓展了一个叫 getElementsByClassName 的函数,返回的是 Array,结果后来 js 官方也更新了个getElementsByClassName 函数,返回的却是 NodeList。这就冲突了。
后来 prototype.js 被迫给出了解决方案:https://johnresig.com/blog/getelementsbyclassname-pre-prototype-16/,感兴趣的可以看看。
2、性能较差
所以还是推荐使用 underscore / lodash 这样的工具库。
2、ES6(原生)vs lodash ?问1:lodash 的好处,上面都提到了,那到底什么时候用原生方法?
答:建议能用原生就用原生,因为原生的性能更高。
问2:那有没有什么方法可以快速判断有没有原生方法支持呢?
答:有。
方法一:安装 eslint 插件
npm install --save-dev eslint-plugin-you-dont-need-lodash-underscore方法二:查阅这个别人整理的挺全的文档
https://segmentfault.com/a/1190000004460234#articleHeader48
3、容我吐槽下官方文档编排的顺序是按照字母顺序而不是逻辑顺序
(有部分是上一条的原因)例子不友好,一上来就是用还没看到的方法
没有 underscore 文档详细(导致我这篇 blog 其实参考了 [underscore 文档](https://www.bootcss.com/p/underscore/ 互为补充)
五、拓展《Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识》:https://zhuanlan.zhihu.com/p/74625177
这篇文章介绍了原型污染的知识,感兴趣可以了解一下。