一个页面里的 JS 有哪些代码呢?
- 你写的代码
- 你的同事写的代码
- 你们引用的第三方库代码
如果只有上面三种代码,那么就属于私有环境(Swift 和 Ruby 就是这种情况),你们可以通过协商来约定如何扩展内置对象,第三方库的选择权也在你们手上,但是 JS 的特殊地方在于,页面上还有其他脚本:
- 百度/谷歌提供的网站统计代码
- 用户的本地插件代码
- 用户点击书签后加载的代码
- 其他无法预料的代码,如运营商劫持等
另外由于 Web 即时更新的特点,就算你在某一时刻搞懂了所有代码对内置库的改动,几个月后,情况也可能发生了翻天覆地的变化了。如果 JS 开发者们随意对内置对象进行修改,那么应用会变得非常不可测,更不用说 JS 的加载还是异步的,你甚至都不能确定到底谁的脚本会先加载。你的代码第一次运行和第二次运行很有可能结果不一样。所以慢慢地,JS 开发者发现只有约定「大家都不修改自己代码之外的对象」才能顺利地合作。
总结出来以下几个问题
- 1容易造成全局污染,和其他库冲突
- 2出了Bug不太好定位问题
- 3有可能出现代码向上不兼容的情况,比如定义了一个Object.prototype.clone。万一ES7、ES8也定义了这个函数,那旧代码不就会出现问题了嘛!
- 4高内聚,低耦合
自己的代码要做到“内聚”,减少和其它部分的“耦合”。把自己想要的功能,放到标准对象上去,显然根本理念就错了