亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

基于ES6的代碼重構(gòu)要點(diǎn)

kviccn / 734人閱讀

摘要:訪問原文地址對(duì)原本代碼邏輯進(jìn)行提煉,提高代碼的閱讀性。增強(qiáng)代碼的和特性。再邏輯還不算太復(fù)雜的時(shí)候,早點(diǎn)修訂一些規(guī)范。

訪問原文地址

Why

對(duì)原本代碼邏輯進(jìn)行提煉,提高代碼的閱讀性。

增強(qiáng)代碼的Object Oriented和Functional Programming特性。

再邏輯還不算太復(fù)雜的時(shí)候,早點(diǎn)修訂一些Coding規(guī)范。

重構(gòu)要點(diǎn)

Construct HTML using template strings.

Eliminate if/else blocks with hash maps.

Collapse multiple arguments with a config object.

Pre-bind arguments to make point-free functions.

Break complex conditionals with intention revealing .variables.

Inline IIFE for complex initialization.

Use hoisting/composed-method to focus on important code.

1.使用ES6的template string來替換不好用的html文本
var html = "
" + "
" + title + "
" + "" + "
"; //使用template直接就可以像些angular的模板一樣在js代碼中插入html let tmp_html = `
${title}
`;
2.用hash-map來替換復(fù)雜的if/else判斷條件
function getSomething(type) {
    if (type === "boy") {
        return "/img/bog.jpg"
    } else if (type === "man") {
        return "/img/man.jpg"
    } else if (type === "girl") {
        return "/img/girl.jpg"
    } else (type === "woman") {
        return "/img/woman.jpg"
    }
}

//hash-map
function getSomething(type) {
    var typeMap = {
        boy: "/img/bog.jpg",
        man: "/img/man.jpg",
        girl: "/img/girl.jpg",
        woman: "/img/woman.jpg",
    }
    
    return typeMap[type] || "/img/default.jpg";
}

//當(dāng)condition或者type條件很復(fù)雜的時(shí)候,可以把他們提取出來,以便維護(hù)
import typeMap from "./conditions";
3.減少函數(shù)入?yún)?,用Object來代替。
function formatNumber(value, decimals, asPercent, prefix, suffix) {
    var formattedNumber = value;
    
    //do something
    
    return formattedNumber;
}
formatNumber(10,2,false,"","%");

//利用ES6默認(rèn)值特性,以及對(duì)象定義參數(shù)
function formatNumber({value=0, decimals=0, asPercent=false, prefix=‘’, suffix=‘’}){}
var num = 20;
formatNumber({value: num, suffix:"%"});
4.使用bind方法,將一個(gè)函數(shù)分離成多個(gè)更好理解的函數(shù)
function doOperation(name="default", args=[]) {
    // 這是一個(gè)通過name來決定操作方法的函數(shù)
}
function findSome() {
    return Promise.resolve("LS460h");
}
function getCarList() {
    return Promise.resolve({size:4800, seats:5, output:6.0});
}
findSome().then(args => {
    doOperation("searchCar", args);
});
getCarList().then(args => {
    doOperation("buyLexus", args);
});

//修改過程
//先通過bind函數(shù),將操作方法從參數(shù)導(dǎo)入的方式分離成2個(gè)函數(shù)
var play = doOperation.bind(null, "searchCar");
var buy = doOperation.bind(null, "buyLexus");

findSome().then(play);
getCarList().then(buy);
5.使用array的some方法來重構(gòu)條件判斷語句
import _ from "lodash";
var age,
    gamer = [],
    adNetworks = [],
    specialAchievements = [];

function showGame() {
    /* do something */
}

if((age > 0 && age <0) || 
    gamer.isFirstTime ||
    _.some(adNetworks, function(n) {
        return gamer.network === n;
    }) ||
    _.some(specialAchievements, function(ach) {
        return gamer.specialAchievement = ach;
    })) {
    showGame();    
}

把conditions提煉成Array,并使用箭頭函數(shù)

var conditions = [
    () => {
        return age > 0 && age <0;
    },
    () => gamer.isFirstTime,
    () => {
        return _.some(adNetworks, n => gamer.network === n);
    },
    () => {
        return _.some(specialAchievements, ach => gamer.specialAchievement === ach);
    },
    //加入新的條件,就變得很輕松
    () => specialAchievements.length > 0
];

let matches = _.some(conditions, c=>c());
if(matches) {
    showGame();    
}
6.使用IIFE(Immediately-Invoked Function Expression)做復(fù)雜初始化
var settings = readSettings();
var apiUrl = `https://${settings.apiDomain}:${settings.apiPort}/api`;

var defaultConfig = {
    apiUrl:apiUrl,
    timezone: settings.timezone,
    account: settings.account,
    theme: settings.theme
}

// IIFE 
var defaultConfig = (() => {
    var settings = readSettings();
    var apiUrl = `https://${settings.apiDomain}:${settings.apiPort}/api`;

    var defaultConfig = {
        apiUrl:apiUrl,
        timezone: settings.timezone,
        account: settings.account,
        theme: settings.theme
    }
})();
7.把回調(diào)的邏輯抽取成函數(shù),隱藏邏輯,讓代碼語義更清晰。
_fetchData(url)
    .then(data => {
        //do something
    })
    .then(transactions => {
        //do something
    })

//after
import {processData, renderHtml} from "./doSomething"
_fetchData(url)
    .then(processData)
    .then(renderHtml);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80876.html

相關(guān)文章

  • 【譯】前端練級(jí)攻略

    摘要:由于系統(tǒng)變得越來越復(fù)雜,人們提出了稱為預(yù)處理器和后處理器的工具來管理復(fù)雜性。后處理器在由預(yù)處理器手寫或編譯后對(duì)應(yīng)用更改。我之前建議的文章,,也涵蓋了預(yù)處理器相關(guān)的知識(shí)。 譯者:前端小智 原文:medium.freecodecamp.org/from-zero-t… medium.freecodecamp.org/from-zero-t… 我記得我剛開始學(xué)習(xí)前端開發(fā)的時(shí)候。我看到了很多文章及...

    wuyumin 評(píng)論0 收藏0
  • 如何用微服務(wù)重構(gòu)應(yīng)用程序

    摘要:以下兩個(gè)要點(diǎn)將會(huì)對(duì)任何微服務(wù)重構(gòu)策略產(chǎn)生重大影響。批量替換通過批發(fā)更換,您可以一次性重構(gòu)整個(gè)應(yīng)用程序,直接從單體式轉(zhuǎn)移到一組微服務(wù)器。如果您通過使用破解您的微服務(wù)器,那么每個(gè)域?qū)@一個(gè)用例,或者更常見的,一組相互關(guān)聯(lián)的用例。 在決定使用微服務(wù)之后,為了將微服務(wù)付諸實(shí)踐,也許你已經(jīng)開始重構(gòu)你的應(yīng)用程序或把重構(gòu)工作列入了待辦事項(xiàng)清單。 無論是哪種情況,如果這是你第一次重構(gòu)應(yīng)用程序,那么您...

    KevinYan 評(píng)論0 收藏0
  • 記一次前端項(xiàng)目重構(gòu)要點(diǎn)總結(jié)

    摘要:重構(gòu)總共耗時(shí)個(gè)工作日。第一個(gè)重構(gòu)原因就是沒有引入靜態(tài)類型,導(dǎo)致查看一個(gè)對(duì)象結(jié)構(gòu)需要翻來覆去在多個(gè)文件中查找。第三是各個(gè)狀態(tài)模塊耦合度高,加大了代碼維護(hù)難度。但如果耦合度過高,往往是因?yàn)槟K沒有細(xì)分到位。這個(gè)項(xiàng)目也不列外。 showImg(https://segmentfault.com/img/remote/1460000019660483); 不知不覺已是2019年的7月,恍惚之間已...

    frolc 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(七)--JavaScript對(duì)象:面向?qū)ο筮€是基于對(duì)象?

    摘要:對(duì)象有狀態(tài)對(duì)象具有狀態(tài),同一對(duì)象可能處于不同狀態(tài)之下。中對(duì)象獨(dú)有的特色對(duì)象具有高度的動(dòng)態(tài)性,這是因?yàn)橘x予了使用者在運(yùn)行時(shí)為對(duì)象添改狀態(tài)和行為的能力。小結(jié)由于的對(duì)象設(shè)計(jì)跟目前主流基于類的面向?qū)ο蟛町惙浅4?,?dǎo)致有不是面向?qū)ο筮@樣的說法。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些...

    mayaohua 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<