切圖崽的自我修養-[ES6] 程式設計風格規範

大切圖崽發表於2019-02-16

前言

沒有規矩 不成方圓


  1. let替換var來定義變數. 如果是常量,使用const

  2. 靜態字串統一用單引號`` , 動態拼接成的字串統一用反引號

    let staticString = `This is a static string`;
    
    let d = `dynamic`;
    let dynamicString = `This is a ${d} string`;
  3. 使用陣列成員對變數賦值時,儘量用解構賦值

    let arr = [1,2,3,4];
    let [arr1,arr2] = arr;
     
    //arr1 =1,  arr2 = 2;
  4. 往物件裡新增/修改屬性時,使用Object.assign,而不用鬆散的.語法

    const objectA = {};
    Object.assign(objectA, { attr1: 3 });
    
    //objectA{attr1:3}
  5. 物件導向的寫法一律寫成class的形式,摒棄原生的prototype的書寫方法

    class A{
        constructor(){}
        prototypeFunA(){}
        static staticFunA(){}
        ...
    }
  6. 用extends實現單繼承, 摒棄原生的prototype鏈書寫方法的繼承

    class A{
        constructor(){}
        prototypeFunA(){}
        static staticFunA(){}
        ...
    }
    
    class B extends A{
        constructor(){
            super();
        }
    }
    
    let b = new B();     
    b.prototypeFunA();
    B.staticFunA();
  7. 用mixin修飾器的方式可以多繼承(es5中可以用call來實現多繼承,不過call/apply方法都屬於奇技淫巧,不推薦使用了),實際上在js中多繼承的應用場景並不多見

  8. 模組的書寫, 類似CommonJs規範. 暴露方法/屬性統一用export

    //moduleA.js
    
    export let name = `Xie Min`; 
    export function fun1(){xxx}
    export function fun1(){xxx}
    
    //或者這樣寫        
    //moduleA.js
    
     let name = `Xie Min`; 
     function fun1(){xxx}
     function fun1(){xxx}
     
     export{
         name,
         fun1,
         fun2,
     }
  1. 引用模組統一用import,摒棄掉require . 這裡特別注意,import模組的時候路徑必須寫成相對路徑的形式, 比如要寫成 import {xx} from `./moduleA` 而不是 import {xx} from `moduleA`

    //index.js
    
    import * as moduleA from `./moduleA`;
    
    moduleA.name;    
    moduleA.fun1();                        
    moduleA.fun2();           

結語

部分參考自 阮一峰《ECMAScript 6入門》
其他細節待補充

相關文章