背景
对于开发而言,不管是前端还是后端,不可能永远是在新开项目上前行,与之相反更多的是在维护和迭代中 匍匐前进。
那么在迭代和维护的路上,多少人来了又去,今天突然接到一个需求需要在一个庞大的项目页面加载完成事件window.onload 里面添加一个新的逻辑的代码,这个时候,通过搜索script标签一看几个百标签,几千行代码在页面运行,每个引入的js代码都有可能包含了onload的绑定事件,每段代码的逻辑错综复杂,已经找不到文档,找不到当年的人,这个时候如何加入一个新的逻辑而不影响其他的。并且保证可以正常运行?
通常的做法和缺点
接到新需求了,没办法做呗,打开编辑器,搜索到window.onload所在到文件和函数位置,在函数内部添加如下代码:
window.onload=function(){
//假设这里有500行已经在执行的代码,逻辑复杂而起臃肿
console.log('我是onload500行代码的代表!');
// 2020-8-3 添加新的逻辑
console.log('执行一段新的逻辑')
}
无可厚非,貌似需求已经完美解决了,通常在项目迭代和变迁中,找到代码修改它,来满足新需求,不改动怎么满足需求呢?然而对于古老而且庞大代码,修改代码是一件很危险对事情,往往是修复来一个bug,暗暗隐藏来一个未知的bug,因为你在测试对时候很可能没有覆盖到老业务到某个场景。而这个副作用,可能产生一个连锁反应,导致整个数据错误,还找不到bug所在。因此我们在寻找不改动原来的逻辑来增加需求代码?
较为可观的改进(保存原引用)
既然目标是不改动原来的代码添加新的逻辑代码,通过大量的思考你可能已经想到来一个方法来实现,就是把原来的方法保存起来。在新的方法中改写就可以,也就是保存原来引用不变:
let a = function(){
console