1. 程式人生 > 實用技巧 >JavaScript重構技巧_物件和值

JavaScript重構技巧_物件和值

JavaScript是一種易於學習的程式語言,編寫執行並執行某些操作的程式很容易。然而,要編寫一段乾淨的JavaScript程式碼是很困難的。

在本文中,我們將介紹一些優化js類和物件的重構思路。

用常量來表示數字

如果我們有很多重複的值且表示一樣的含義,但沒有明確地說明,那麼我們應該將它們轉換為常量,以便每個人都知道它們的含義,並且如果需要更改,我們只需更改一個地方就行了。

例如我們可能會這樣寫程式碼:

const getWeight = (mass) => mass * 9.81
const potentialEnergy = (mass, height) => mass * height * 9.81

對於含義相同的數學我可以用常量表示:

const GRAVITATIONAL_CONSTANT = 9.81;
const getWeight = (mass) => mass * GRAVITATIONAL_CONSTANT
const potentialEnergy = (mass, height) => mass * height * GRAVITATIONAL_CONSTANT

現在我們知道9.81實際上意味著GRAVITATIONAL_CONSTANT,我們不必重複自己。

上面我們用常量GRAVITATIONAL_CONSTANT表示9.81,這樣別人一看就知道它表示是萬有引力常數常量。

封裝欄位

我們可以將getter和setter新增到類的欄位中,這樣就不心直接對類的欄位進行操作。

例如我們可能會這樣寫程式碼:

class Person {
  constructor(name) {
    this.name = name;
  }
}

如果要控制如何設定值,可以這樣重構:

class Person {
  constructor(name) {
    this._name = name
  }

  get name() {
    return this._name
  }

  set name() {
    this._name = name
  }
}

這樣,我們就可以控制如何設定值,因為我們可以在setter中放入程式碼來設定名稱。我們還可以控制誰能獲得名稱,因為它是在getter中返回的。

用陣列類代替欄位

我們可以將欄位替換為其自己的資料類,這樣在記錄資料中會有更強靈活性。

例如我們可能會這樣寫程式碼:

class Person {
  constructor(name, bloodGroup) {
    this.name = name;
    this.bloodGroup = bloodGroup;
  }
}
const person = new Person('joe', 'a')

如果我們想擴充bloodGroup(血型)的種類,我們可以把bloodGroup重構成一個類。

class BloodGroup {
  constructor(name) {
    this.bloodGroup = name;
  }
}
class Person {
  constructor(name, bloodGroup) {
    this.name = name;
    this.bloodGroup = bloodGroup;
  }
}
const bloodGroup = new BloodGroup('a');
const person = new Person('joe', bloodGroup)

這樣,我們就可以在bloodGroup欄位中儲存更多種類的資料。

用狀態/策略替換型別程式碼

有時,我們可以根據物件的型別建立子類,而不是在類中使用型別欄位。這樣,我們就可以在它們自己的子類中擁有兩個類不共享的更多成員。

例如我們可能會這樣寫程式碼:

class Animal {
  constructor (type) {
    this.type = type
  }
}

const cat = new Animal('cat')
const dog = new Animal('dog')

我們可以根據type型別來重構對應的類:

class Animal {
  //...
}
class Cat extends Animal {
  //...
}
class Dog extends Animal {
  //...
}
const cat = new Cat();
const dog = new Dog();

在上面的示例中,我們單獨編寫一個Animal類,而另外新增Cat和Dog類,它們是Animal類的子類。

這樣我們可以Cat和Dog類中共享的屬性儲存在各自的類的,把共享的放在Animal類中。

分解條件表示式

我們可以將長的條件表示式分解為更小的條件表示式。

例如我們可能會這樣寫程式碼:

letieIEMac = navigator.userAgent.toLowerCase().includes("mac") && navigator.userAgent.toLowerCase().includes("ie")

我們可以這樣重構它:

let userAgent = navigator.userAgent.toLowerCase();
let isMac = userAgent.includes("mac");
let isIE = userAgent.toLowerCase().includes("ie");
let isMacIE = isMac && isIE;

我們將冗長又難懂的條件表示式分解多個短小表示式,這樣會大大滴增加閱讀性。

總結

如果我們有很多重複的值且表示一樣的含義,但沒有明確地說明,那麼我們應該將它們轉換為常量,以便每個人都知道它們的含義,並且如果需要更改,我們只需更改一個地方就行了。

為了更好控制類的屬性,我們可以為它新增getter和setter方法。

如果我們有type欄位,則可以用它們自己的子類替換它們。

最後,我們可以將長條件表示式分解為較小的條件表示式,以便於閱讀和理解。

廣州vi設計http://www.maiqicn.com 辦公資源網站大全https://www.wode007.com