成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript優(yōu)秀實(shí)踐之改進(jìn)類

開(kāi)發(fā) 前端
使用默認(rèn)參數(shù)和屬性縮寫(xiě),清理我們的JavaScript代碼很容易。在本文中,我們將探討創(chuàng)建類的優(yōu)秀做法以及何時(shí)創(chuàng)建類。

 使用默認(rèn)參數(shù)和屬性縮寫(xiě),清理我們的JavaScript代碼很容易。

在本文中,我們將探討創(chuàng)建類的優(yōu)秀做法以及何時(shí)創(chuàng)建類。

[[324567]]

構(gòu)造函數(shù)

為了讓我們的構(gòu)造函數(shù)更好地發(fā)揮作用,我們應(yīng)該做一些事情。它們是:

如果可能的話,初始化所有構(gòu)造函數(shù)中的所有成員數(shù)據(jù)

我們應(yīng)該將它們?nèi)糠湃霕?gòu)造函數(shù)中,以便在實(shí)例化對(duì)象時(shí)將它們?nèi)砍跏蓟?/p>

所以我們可以這樣寫(xiě):

 

  1. class Person { 
  2.   constructor(name) { 
  3.     if (this.instance) { 
  4.       this.instance = { 
  5.         name 
  6.       } 
  7.     } 
  8.     return this.instance; 
  9.   } 

現(xiàn)在我們確保所有的東西都用一個(gè)值初始化了。

在構(gòu)造函數(shù)中創(chuàng)建一個(gè)單例

如果我們只需要一個(gè)構(gòu)造函數(shù)的一個(gè)實(shí)例,那么我們可以創(chuàng)建一個(gè)實(shí)例。

例如,我們可以編寫(xiě)以下代碼:

 

  1. class Person { 
  2.   constructor(name) { 
  3.     if (this.instance) { 
  4.       this.instance = { 
  5.         name 
  6.       } 
  7.     } 
  8.     return this.instance; 
  9.   } 

在上面的代碼中,如果 this.instance 還沒(méi)有定義,我們返回我們創(chuàng)建的對(duì)象。

否則,我們將返回設(shè)置為 this.instance 的任何內(nèi)容。

優(yōu)先使用深度拷貝而不是淺拷貝

深度拷貝會(huì)復(fù)制所有內(nèi)容,因此比淺層復(fù)制要好得多,淺拷貝會(huì)留下一些引用原始對(duì)象的東西。

如果我們想要真正的副本,那就不好了。

因此,我們必須編寫(xiě)代碼來(lái)制作深層副本,如下所示:

 

  1. const copy = obj => { 
  2.   const copied = { 
  3.     ...obj 
  4.   }; 
  5.   for (const k of Object.keys(obj)) { 
  6.     if (typeof obj[k] === 'object') { 
  7.       copied[k] = { 
  8.         ...copied[k] 
  9.       }; 
  10.       copy(copied[k]); 
  11.     } 
  12.   } 
  13.   return copied; 

如果發(fā)現(xiàn)嵌套對(duì)象,我們只使用擴(kuò)展運(yùn)算符來(lái)復(fù)制嵌套對(duì)象,并遞歸執(zhí)行相同的操作。

然后,我們返回我們復(fù)制的對(duì)象。

我們什么時(shí)候應(yīng)該創(chuàng)建一個(gè)類?

我們不應(yīng)該總是創(chuàng)建類。在一些場(chǎng)景中,創(chuàng)建一個(gè)類是有意義的。

模擬現(xiàn)實(shí)世界的對(duì)象

類非常適合建模真實(shí)世界的對(duì)象,因?yàn)樗鼈兛梢越?duì)象的行為。

它們?cè)试S我們將實(shí)例變量和方法封裝到一個(gè)包中,分別存儲(chǔ)狀態(tài)和對(duì)對(duì)象執(zhí)行操作。

建模抽象對(duì)象

同樣,我們可以使用類對(duì)抽象對(duì)象進(jìn)行建模。

它們可以用來(lái)進(jìn)行抽象,抽象是對(duì)不同類型對(duì)象的概括。

類非常適合存放子類的共享成員,子類可以繼承它們。

但是,我們應(yīng)該保持繼承樹(shù)的簡(jiǎn)單性,這樣人們就不會(huì)被代碼弄糊涂了。

降低復(fù)雜度

我們可以使用類來(lái)降低程序的復(fù)雜性。

類非常適合隱藏信息。在JavaScript中,類中還沒(méi)有私有變量,因此我們必須在方法中隱藏?cái)?shù)據(jù)。

這樣我們就可以最小化程序不同部分之間的耦合。

隱藏實(shí)現(xiàn)細(xì)節(jié)

方法也適合隱藏實(shí)現(xiàn)細(xì)節(jié)。

我們可以把細(xì)節(jié)隱藏在方法中,只運(yùn)行需要的東西。

為此,我們可以在方法內(nèi)部嵌套函數(shù)和變量。

限制變化的副作用

由于我們可以隱藏事物,因此可以減少更改的影響。

與隱藏實(shí)現(xiàn)一樣,可以通過(guò)在方法內(nèi)限制更改的影響來(lái)隔離更改的影響。

隱藏全局?jǐn)?shù)據(jù)

通過(guò)將全局?jǐn)?shù)據(jù)放入類的方法中,它們可以成為私有數(shù)據(jù)。

這樣,他們就不必向公眾公開(kāi)。我們要做的就是使用 let 和 const 在方法中聲明它們。

簡(jiǎn)化參數(shù)傳遞

如果我們將相同的參數(shù)傳遞給不同的函數(shù),則可以將參數(shù)更改為實(shí)例變量,將函數(shù)更改為方法。

例如,如果我們有:

 

  1. const speak = (name) => `${name} spoke`; 
  2. const greet = (name) => `hi, ${name}`; 

然后,我們可以將方法放入自己的類中,如下所示:

 

  1. class Person { 
  2.   constructor(name) { 
  3.     this.name = name
  4.   } 
  5.   speak() { 
  6.     return `${this.name} spoke`; 
  7.   } 
  8.   greet() { 
  9.     return `hi, ${this.name}`; 
  10.   } 

現(xiàn)在,我們不必在任何地方傳遞 name。

我們只需要?jiǎng)?chuàng)建一個(gè) Person 實(shí)例,并調(diào)用這些方法而無(wú)需傳入任何參數(shù)。

總結(jié)

我們可以創(chuàng)建類來(lái)封裝數(shù)據(jù)并將內(nèi)容打包在一起。但是,我們不應(yīng)該為所有內(nèi)容創(chuàng)建類。

另外,我們應(yīng)該盡可能深拷貝而不是淺拷貝。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2024-04-11 10:20:57

JavaScript前端Web

2021-03-11 14:33:28

Kubernetes開(kāi)源容器

2022-02-23 09:03:29

JavaScript開(kāi)發(fā)命名約定

2021-05-26 08:50:37

JavaScript代碼重構(gòu)函數(shù)

2024-05-31 08:30:23

2023-10-10 10:57:12

JavaScript代碼優(yōu)化

2022-11-28 23:48:06

JavaScript編程語(yǔ)言技巧

2020-04-28 16:12:50

前端JavaScript代碼

2020-02-25 15:27:37

JavaScriptTypeScript瀏覽器

2023-12-08 14:50:45

Python枚舉類工具

2022-01-21 13:53:29

云計(jì)算邊緣計(jì)算數(shù)據(jù)

2022-11-30 10:34:17

2022-07-21 08:03:15

云安全漏洞修復(fù)

2020-05-25 11:14:59

代碼程序開(kāi)發(fā)

2023-02-07 15:33:16

云遷移數(shù)據(jù)中心云計(jì)算

2024-12-12 09:02:35

2020-02-25 20:55:20

JavaScript開(kāi)發(fā) 技巧

2020-03-27 22:18:55

JavaScript編程語(yǔ)言代碼

2023-06-19 11:49:03

2022-04-19 10:17:20

云遷移云原生可觀測(cè)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 一区二区三区四区电影视频在线观看 | 国产在线第一页 | 日韩精品视频在线免费观看 | 国产成人99久久亚洲综合精品 | 国产精品毛片无码 | 国产成人久久精品一区二区三区 | 三级在线观看 | 欧美日韩成人在线观看 | 精品亚洲第一 | 人人做人人澡人人爽欧美 | 狠狠操狠狠操 | 99爱视频| 欧美aa在线 | 亚洲高清在线 | 91视频在线观看 | 伊人久久在线观看 | 欧美成人精品在线观看 | 91精品国产91久久久久久吃药 | 国产成人精品在线 | 国产一区影院 | 狠狠色综合网站久久久久久久 | 精品日韩在线 | 中文字幕日韩欧美一区二区三区 | 在线视频国产一区 | av网址在线 | 亚洲丝袜天堂 | 日本一卡精品视频免费 | 日本成人午夜影院 | 日日操操 | 欧美日韩久久精品 | 精品国产一区探花在线观看 | 国产视频一区二区 | 日日久| 四虎影视1304t | 中文字幕视频在线免费 | 婷婷不卡 | 国产精品欧美一区二区三区 | 99久9 | 伊人99 | 国产精品99久久久精品免费观看 | 看片一区|