lodash 学习笔记 (8)

拓展:市面上的 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

这篇文章介绍了原型污染的知识,感兴趣可以了解一下。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygjgp.html