可維護的代碼遵循原則:php
變量取名多爲爲名詞,方法取名多爲爲動詞css
// 變量名 car, person; // 方法名 getName, isEnable;
功能過於依賴,代碼耦合過緊,不利於維護。而經過解耦能讓咱們更專注地處理特定功能業務的開發,也方便咱們開發中調試,從複雜的耦合依賴中抽離出來。html
解耦優點:代碼複用,單元測試。vue
解耦原則:程序員
應用邏輯/事件處理程序解耦合的原則:vuex
- 勿將event對象傳給其餘方法;只傳來自event對象中所> 需的數據
- 任何能夠在應用層面的動做都應該能夠在不執行任何事> 件處理程序的狀況下進行;
- 任何事件處理程序都應該處理事件,而後將處理轉交給應用邏輯
// 一個事件解耦的例子 var pwdInput = document.getElementById('password'); // 回車事件 pwdInput.addEventListener('keyup', function(event){ if (event.keyCode == 13) { validatePassword(event.target.value); } }) // 失焦事件 pwdInput.addEventListener('blur', function(event) { validatePassword(event.target.value); }) // 業務應用單獨封裝到一個方法裏面,多處複用/單元測試皆可 function validatePassword(pwd) { if (!pwd) { alert('密碼不能爲空!'); } }
JavaScript中是經過原型鏈來實現繼承,而原型繼承的一個特色就是原型上定義的屬性方法,能夠被多個實例共享使用。redux
對象維護原則:後端
須要修改對象時:數組
var name = 'KenTsang'; function sayName () { console.log(name); } var MyApp = { name: 'KenTsang', sayName: function() { console.log(this.name); } skill: { html: 80, css: 80, js: 80 } } MyApp.skill.js // 80
雖然減小程序員輸錯代碼形成修改全局變量的概率,但依舊能夠修改到全局變量,並且增長了代碼量。函數
TIPS: null
可同時判斷null/undefined
,可用來判斷對象屬性是否存在。
使用null
做判斷沒法進行充分的類型檢查。
// 錯誤用法 function sortArrays(values) { if (values != null) { // 非數組類型就會報錯,由於sort方法只有Array才具有 values.sort(); } } // 正確用法 if (values instanceof Array) { value.sort(); }
使用null比較的代碼,替換原則:
- 若是值應爲一個引用類型,使用instanceof操做符檢查其構造函數
- 若是值應爲一個基本類型(值類型),使用typeof檢查其類型
- 若是是但願對象包含某個特色的方法名,則使用typeof操做符確保指定名字的方法存在於對象上
// 值類型 (Number, String, Boolean) typeof value == 'string'; // 引用類型 (Array, Object, Function) value instanceof Array; // 對象方法 (Object.property) typeof person.getName == 'function'
var CONSTANS = { INVALID_VALUES_MSG: "Invalid value!", INVALID_VALUE_URL: "/erros/invalid.php" } CONSTANS.INVALID_VALUES_MSG // "Invalid value!"
常量應用原則:
redux/vuex的actionType判斷的應用,也是常量應用常見的場景。好處就是引用時拼寫錯誤會直接拋出變量引用錯誤,而直接用字符串值判斷,則不會拋出錯誤,不利於調試。
// redux-reducer.js文件中應用常量 import { ADD_TODO_ITEM, DELETE_TODO_ITEM } from './actionTypes' const defaultState = { inputValue: '', list: [] }; export default (state = defaultState, action) => { let newState = JSON.parse(JSON.stringify(state)); switch (action.type) { case DELETE_TODO_ITEM: newState.list.splice(action.value, 1); break; case ADD_TODO_ITEM: if (newState.inputValue.trim().length) { newState.list.push(newState.inputValue); } newState.inputValue = ''; break; } return newState; }
參考文檔
做者:以樂之名 本文原創,有不當的地方歡迎指出。轉載請指明出處。