工作中,大部分情況,我們都面臨的不是重頭開發一套系統,而是在已有系統上做修改。
那問題就是有什麼好的思維方法去修改別人的代碼。
我總結一下經驗
- 1.第一步讀懂別人的代碼,讀懂代碼後記得寫註釋 ,要形成一個好習慣。
- 2.找到要修改的代碼後,在功能未聯調提測前,不要把別人的代碼刪除,最好只是註釋掉。方便你需要的時候來參考。因爲對於你刪除的代碼,可能隱藏了一些業務細節,而你沒有注意到。接手新系統,最難理解的是別人的業務。可能產品經理都換了幾批了,原有的業務細節隨着相關人員流失,已經沒有人知道了。所以要對老系統的原有代碼保持敬畏。一旦以Bug的形式出行時,方便你注意到那些細節
- 3.添加代碼,把自己要寫的代碼封裝起來。可以簡單的是一個函數封裝起來,也可以是一個class封裝起來,也可以搞成一個文件模塊封裝起來。封裝的代碼好處很多。容易追責,可以很容易判斷是老代碼問題,還是你加的代碼問題。
很多人增加功能修改別人的代碼時,更加喜歡的是在原有的函數裏寫代碼,定義全局變量,就像搞成語接龍,最後一頁的代碼 長達幾千行,閱讀性很差。
修改css的經驗
很多人要修改在某個已有樣式基礎上要覆蓋別人的樣式,都是加! important,加Id. 這是不是太簡單粗暴了。你這樣覆蓋後,後面的還如何覆蓋。
例如
<div id='head'></div>
<style>
#head{
color:red;
}
</style>
如果要覆蓋color的樣式,很多人可能是加內聯樣式 來解決問題。其實這不是一個好主意。應該是改成
<div id='head'></div>
<style>
#head{
color:red;
}
div#head{
color:black;
}
</style>
這樣就可以覆蓋樣式了。這要求大家瞭解樣式權重的疊加規則。
現在簡單總結一下
1.本地內聯樣式(<stlye></style>)大於導入樣式(Link或@import)
2.樣式選擇符權重大小排序 !import>內聯>id>(class,屬性選擇符,僞類)>(標籤選擇器 ,僞元素)>通配類型的選擇器(*,結構選擇,前面一個 ,子類,後代,鄰居)
3.用戶設置>創作者>瀏覽器自帶樣式
一般我們要掌握2就夠了。另外記住權重是可以疊加的。
彩蛋一個
- promise中finally的代碼在then或catch的回到執行完成後纔會執行。
- 微信小程序中,
initConfirmOrder(params) {
return request
.Post(xxx, params)
.then(({ errcode, data }) => {
wx.hideLoading({
complete: function() {
console.log('complete 被執行');
console.log('complete 被執行');
console.log('complete 被執行');
console.log('complete 被執行');
},
});
})
.finally(function() {
console.log('測試代碼 finally被執行');
console.log('測試代碼 finally被執行');
console.log('測試代碼 finally被執行');
});
}
這樣的代碼中 comlete裏回調代碼會在finally執行完成後才執行
原理我不太清晰,但是事實是這樣。這樣有時候可能產生一些你意料之外的Bug,請同胞們注意。