這篇文章主要介紹“VSCode中如何進(jìn)行前端重構(gòu)”,在日常操作中,相信很多人在VSCode中如何進(jìn)行前端重構(gòu)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”VSCode中如何進(jìn)行前端重構(gòu)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比廬陽(yáng)網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式廬陽(yáng)網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋廬陽(yáng)地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴(lài)。
為什么要重命名:命名不清晰,無(wú)法讓人理解。
操作步驟:
選中變量名,鼠標(biāo)右鍵選擇重命名符號(hào)(Rename Symbol),或者使用快捷鍵 F2 ;
彈出框輸入想要修改的名字;
VSCode 會(huì)把后續(xù)相關(guān)的名字都改掉。
選中要重構(gòu)的內(nèi)容,鼠標(biāo)右鍵選擇重構(gòu)(Refactor),或者使用 Ctrl + Shift + R。
根據(jù)選中的內(nèi)容,可能會(huì)出現(xiàn)以下內(nèi)容供選擇重構(gòu):
generate ‘get’ and ‘set’ accessors 生成get、set處理器
將函數(shù)轉(zhuǎn)換成 ES2015類(lèi)
將所有函數(shù)轉(zhuǎn)換成類(lèi)
提取到 class 'xxx' 中的 Method
提取到 class 'xxx' 中的 readonly field
generate ‘get’ and ‘set’ accessors 生成get、set處理器
Extract function
提取到當(dāng)前函數(shù)里的 inner function
提取到 Module 范圍的 function
提取到 global 范圍的 function
Convert to template string 轉(zhuǎn)換成模板字符串
Extract constant
提取到封閉范圍的 constant
提取到 Module 范圍的 constant
Convert to optional chain expression
刪除未使用的聲明
在未使用的聲明前
Move to a new File
Convert default export to named export
Convert named export to default export
Convert namespace import to named export
Convert named imports to namepace export
import/export
函數(shù)/類(lèi)
變量/表達(dá)式
字符串
表達(dá)式/函數(shù)
對(duì)象方法
類(lèi)
魔法數(shù)字
為什么要修改魔法數(shù)字?因?yàn)槌M(jìn)制數(shù)之外,數(shù)字的實(shí)際意義無(wú)法被人看懂。
目標(biāo):定義一個(gè)常量值,寫(xiě)清楚改數(shù)字的實(shí)際意義。
操作:
選中魔法數(shù)字進(jìn)行重構(gòu)。根據(jù)需要,推薦選擇:
兩者都會(huì)定義一個(gè)常量,前者定義在當(dāng)前函數(shù)內(nèi),后者則是整個(gè)模塊/文件中;
提取到封閉范圍的 constant
提取到 Module/global 范圍的 constant
代碼抽取到新的變量中,并出現(xiàn)重命名的輸入框;
使用全大寫(xiě)單詞,單詞使用“_”間隔。
例子:今年雙十一持續(xù)13天,計(jì)算除雙十一促銷(xiāo)結(jié)束的時(shí)間。
function promotionEndDate() {
  return new Date(new Date('2022-11-11').getTime() + 13 * 60 * 60 * 24 * 1000);
}
/**
 * 修改后:
 * 將開(kāi)始時(shí)間 START_DATE,持續(xù)的天數(shù) LASTING_DAYS 抽取出來(lái)做成變量
 * 如果只有一處使用,則在使用到的函數(shù)內(nèi)定義;
 * 如果多處都有用,可以考慮放在函數(shù)外,模塊內(nèi)。
 */
function promotionEndDate() {
    const START_DATE = '2022-11-11';
    const LASTING_DAYS = 13;
    return new Date(new Date(START_DATE).getTime() + LASTING_DAYS * 60 * 60 * 24 * 1000);
}復(fù)雜的邏輯條件
為什么要修改復(fù)雜邏輯?復(fù)雜的邏輯,往往條件判斷繁多,閱讀難度比較高。
操作:
選中復(fù)雜的邏輯條件進(jìn)行重構(gòu)。根據(jù)需要,選擇:
提取到封閉范圍的 constant
提取到當(dāng)前函數(shù)里的 inner function
提取到 Module/global 范圍的 function
代碼抽離到一個(gè)新的變量/函數(shù)中,并出現(xiàn)重命名的輸入框;
使用駝峰命名,使用 is/has起頭,每個(gè)單詞首字母大寫(xiě)。
例子:返回指定的某個(gè)月有多少天
function monthDay(year, month) {
    var day31 = [1, 3, 5, 7, 8, 10, 12];
    var day30 = [4, 6, 9, 11];
    if (day31.indexOf(month) > -1) {
        return 31;
    } else if (day30.indexOf(month) > -1) {
        return 30;
    } else {
        if ((year % 4 == 0) && (year % 100 != 0 || year % 400 == 0)) {
            return 29;
        } else {
            return 28;
        }
    }
}
/**
 * 修改后
 * 是否閏年在日期處理函數(shù)中會(huì)經(jīng)常使用,所以將其提取到當(dāng)前模塊的最外層了
 */
function monthDay(year, month) {
    ...
    if (day31.indexOf(month) > -1) {
        return 31;
    } else if (day30.indexOf(month) > -1) {
        return 30;
    } else {
        if (isLeapYear(year)) {
            return 29;
        } else {
            return 28;
        }
    }
}
function isLeapYear(year) {
    return (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0);
}寫(xiě)了注釋的代碼片段
更推薦代碼即注釋的理念。我們寫(xiě)注釋之前要想明白為什么需要注釋?zhuān)?/p>
如果代碼本身已經(jīng)很清晰,應(yīng)該刪除注釋。
如果抽取代碼片段,取個(gè)合適的名字,能讓代碼易于閱讀,也可以刪除注釋。
目標(biāo):將代碼片段抽取出來(lái)做成函數(shù),函數(shù)以此代碼塊的具體功能做命名。
操作:
選擇代碼塊,重構(gòu)(Refactor)。選擇:
提取到當(dāng)前函數(shù)里的 inner function
例子:ajax 請(qǐng)求
function ajax(options) {
  options = options || {};
  options.type = (options.type || 'GET').toUpperCase();
  options.dataType = options.dataType || 'json';
  const READY_STATE = 4;
  const NET_STATUS = {
    OK: 200,
    RIDERCT: 300
  };
  const params = this.formatAjaxParams(options.data);
  let xhr;
  // 創(chuàng)建 - 非IE6 - 第一步
  if (window.XMLHttpRequest) {
    xhr = new window.XMLHttpRequest();
  } else { // IE6及其以下版本瀏覽器
    xhr = new window.ActiveXObject('Microsoft.XMLHTTP');
  }
  // 連接 和 發(fā)送 - 第二步
  if (options.type === 'GET') {
    ...
  } else if (options.type === 'POST') {
    ...
  }
  
  // 接收 - 第三步
  xhr.onreadystatechange = function () {
    if (xhr.readyState === READY_STATE) {
      ...
    }
  };
}
// 修改后
function ajax(options) {
  ...
  let xhr;
  create();
  connectAndSend();
  recieve();
  function create() {...}
  function connectAndSend() {...}
  function recieve() {...}
}過(guò)長(zhǎng)的函數(shù)
功能拆分做成外部函數(shù),再在內(nèi)部調(diào)用。
操作:
選擇代碼塊重構(gòu),選擇:
提取到 Module/Global 范圍的 function
代碼塊會(huì)生成一個(gè)函數(shù),并攜帶必要的參數(shù)
例子:上個(gè)例子中,可以將 ajax 的接收模塊獨(dú)立成模塊的function
function ajax(options) {
  ...
  create();
  recieve();
  connectAndSend(options, xhr, params);
}
function connectAndSend(options, xhr, params) {
  if (options.type === 'GET') {
    ...
  } else if (options.type === 'POST') {
    ...
  }
}重復(fù)的代碼/過(guò)長(zhǎng)的文件
操作:
選擇代碼塊重構(gòu),選擇 Move to a new file;
代碼會(huì)遷移到以當(dāng)前函數(shù)/類(lèi)作為文件名的文件中;如果有多個(gè)類(lèi)/函數(shù),會(huì)以第一個(gè)類(lèi)/函數(shù)做命明
將函數(shù)/類(lèi)使用 export 暴露出去;
在原文件中用 import 引入函數(shù)/類(lèi)。
import/export
default 和命名、命名空間和命名的轉(zhuǎn)換。
// named
export function nextMonthDay(year, month) {}
// default
export default function nextMonthDay(year, month) {}
// namepace 
import * as refactor from './refactor';
// named
import { nextMonthDay } from './refactor';對(duì)象方法
生成get、set處理器
const person = {
  age: 32
};
// 生成get、set處理器
const person = {
  _age: 32,
  get age() {
    return this._age;
  },
  set age(value) {
    this._age = value;
  },
};模板字符串
字符串拼接,快速轉(zhuǎn)換成模板字符串:
class Person{
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
  getFullName() {
    return this.firstName + ' ' + this.lastName;
  }
}
// 模板字符串
class Person{
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
  getFullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}類(lèi)
生成get、set處理器,與對(duì)象方法的結(jié)果類(lèi)似。
提取到 class xxx 的 Method, 與上面寫(xiě)注釋的代碼、重復(fù)代碼提取的類(lèi)似。
在此不再?gòu)?fù)述。
提供 ES 2015 類(lèi)轉(zhuǎn)換,支持原型方法轉(zhuǎn)換。
const Person = function() {
  this.age = 32;
};
Person.prototype.getAge = function() {
  return this.age;
}
Person.prototype.setAge = function(value) {
  return this.age = value;
}
// ES 2015 類(lèi)
class Person {
  constructor() {
    this.age = 32;
  }
  getAge() {
    return this.age;
  }
  setAge(value) {
    return this.age = value;
  }
}到此,關(guān)于“VSCode中如何進(jìn)行前端重構(gòu)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
                網(wǎng)站標(biāo)題:VSCode中如何進(jìn)行前端重構(gòu)
                
                新聞來(lái)源:http://chinadenli.net/article4/gghiie.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷(xiāo)推廣、標(biāo)簽優(yōu)化、品牌網(wǎng)站制作、服務(wù)器托管、品牌網(wǎng)站設(shè)計(jì)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
