自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

強(qiáng)迫癥福音:函數(shù)整理成類的5個(gè)原因

開發(fā) 前端
不同函數(shù)具有不同的地位,類本質(zhì)上是以某種方式相互關(guān)聯(lián)的函數(shù)族。特定范圍內(nèi)二者具有共性,其工作內(nèi)容也可能存在相似之處。

 [[321998]]

本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)

不同函數(shù)具有不同的地位,類本質(zhì)上是以某種方式相互關(guān)聯(lián)的函數(shù)族。特定范圍內(nèi)二者具有共性,其工作內(nèi)容也可能存在相似之處。

但無論如何,有時(shí)最好將函數(shù)作為方法編寫于對(duì)象中。即使乍眼一看不是如此,但事實(shí)上JavaScript本身是基于對(duì)象的概念構(gòu)建的。

類是如何工作的?為何要將函數(shù)轉(zhuǎn)換為對(duì)象?下面5點(diǎn)將給出答案。

 

JavaScript中類的快速入門

JavaScript中的類是一種函數(shù),正常情況下,您會(huì)這么寫:

 

  1. function catName(){ 
  2.    console.log("Tibbers"); 

也可以用箭頭表示法:

 

  1. catName = () =>console.log("Tibbers"); 

這么做當(dāng)然沒有問題,但如果你有一堆與貓相關(guān)的函數(shù),并想將它們附加到某個(gè)實(shí)例上呢?如果想操作時(shí)不需找出并告知代碼具體實(shí)例目標(biāo),又該怎么做呢?

這就是“類”派上用場的地方。

類通常有兩部分:屬性(attributes)和方法(methods)。屬性定義類的特定實(shí)例值。方法對(duì)這些屬性執(zhí)行特定操作。屬性在構(gòu)造函數(shù)中設(shè)置,方法通常以函數(shù)的形式出現(xiàn)在類中。

因此,“類”可能如下所示:

 

  1. class Cat{ 
  2.   constructor(name, age, sound){   
  3.       this.name = name
  4.       this.age = age; 
  5.       this.sound = sound; 
  6.   } speak = () => console.log(this.sound);  name = () => console.log('hello, my nameis ' + this.name);  age = () =>console.log('I am ' + this.age); 

這基本囊括了JavaScript中80%的類。另外20%涉及擴(kuò)展和構(gòu)造類的不同方法,這超出了本文的討論范圍。我們?cè)噲D回答的問題是——為何應(yīng)將函數(shù)整理成類,而非僅將其作為獨(dú)立代碼。

 

有組織性的函數(shù)更實(shí)用

函數(shù)的目的是為代碼創(chuàng)建范圍和邊界。當(dāng)您編寫函數(shù)時(shí),實(shí)際上是在對(duì)解釋器說——嘿,我想要打包使用一些東西。編寫類的過程實(shí)質(zhì)上是在為你的代碼創(chuàng)建另一層次的組織。

高效實(shí)用的代碼取決于用戶用編程語言組織和傳達(dá)思想的能力。而由于JavaScript編程語言的組織松散,代碼容易陷入混亂無序狀態(tài)。用戶可以通過多種方式編寫相同的內(nèi)容,代碼仍起作用。

所以將函數(shù)整理成類的問題其實(shí)是一個(gè)組織問題。函數(shù)是一種組織方法,類正好使它進(jìn)一步發(fā)展。

 

防止突變

有一個(gè)誤解,當(dāng)您想保護(hù)變量不受突變影響時(shí),需要阻止其更改。

然而,變異與變量的形狀有關(guān),而非實(shí)際變量本身。變量的值可以更改,而形狀不能。

例如,查看以下對(duì)象:

 

  1. Tibbers = { name:"Tibbers", type: "cat", color: "ginger" } 

當(dāng)前形式的對(duì)象不受突變保護(hù),因?yàn)槟憧梢赃@樣做:

 

  1. Tibbers.owner = "Aphinya"

通過添加另一個(gè)密鑰對(duì)值,可以更改對(duì)象的形狀。但是,如果使用類將對(duì)象Tibbers實(shí)例化,則可以防止這種情況。你可以嘗試傳遞一個(gè)新值,但它不會(huì)起任何作用。

為何防止突變?nèi)绱酥匾?當(dāng)數(shù)據(jù)的形狀無法更改時(shí),它將在代碼的函數(shù)上產(chǎn)生高度的確定性——使其在方法上更具功能性,并減少了在其他地方使用該對(duì)象時(shí)潛在的副作用。

 

一切基于對(duì)象

JavaScript是基于原型的思想構(gòu)建的。這意味著您的代碼以單個(gè)全局作用域開始,該作用域分解為更小的環(huán)網(wǎng)作用域,也可以分解為更小的作用域。圖表形式如下所示:

 

強(qiáng)迫癥福音:函數(shù)整理成類的5個(gè)原因

 

屬性從父級(jí)繼承到子級(jí)

因此,當(dāng)位于鏈下游的某個(gè)對(duì)象想要某物時(shí),它會(huì)向其父對(duì)象索要。如果父級(jí)沒有,則該進(jìn)程將繼續(xù)沿鏈向上運(yùn)行,直到找到或返回未定義的進(jìn)程為止。

獨(dú)立函數(shù)則沒有這種能力,因?yàn)樗鼪]有遍歷屬性的鏈。函數(shù)本質(zhì)上位于窗口對(duì)象上,只能訪問全局作用域。

為什么不將所有內(nèi)容都設(shè)置為全局范圍?

由于您不需要遍歷所有的值,一旦用JavaScript聲明了全局作用域,大多數(shù)情況下它不會(huì)消失。如果附加到該變量的數(shù)據(jù)相當(dāng)大,則會(huì)由于內(nèi)存空間不足而降低應(yīng)用程序的速度和高效處理事物的能力。

 

將函數(shù)容器化、模塊化

任何東西都有可能模塊化。實(shí)用模塊化與邏輯推理和特定想法的緊密程度有關(guān)。任何人都可以說其代碼是模塊化的。你可以把你的代碼放在一個(gè)函數(shù)里,然后指出它的模塊化特征。

然而,當(dāng)使用“類”時(shí),您將系統(tǒng)地使用強(qiáng)制結(jié)構(gòu)和內(nèi)聚思想來處理模塊化。從本質(zhì)上講,您是在對(duì)代碼進(jìn)行容器化并整理其功能,從而實(shí)現(xiàn)系列相關(guān)特性。

因?yàn)檫@就是“類”的方法——基于它們所執(zhí)行函數(shù)的集合。

 

JavaScript面向?qū)ο?/strong>

JavaScript是一種具有動(dòng)態(tài)類型的多范式語言。多范式意味著它不僅僅局限于單一的意識(shí)形態(tài)來構(gòu)建邏輯。

這意味著JavaScript不是純功能,也不是純面向?qū)ο蟆K且环N語言,允許您混合使用并匹配編寫、組織代碼的方法,從而靈活地適應(yīng)邏輯需求和條件。

JavaScript面向?qū)ο蟮脑O(shè)計(jì)特性遵循基于原型的方法,這意味著可以使用類進(jìn)行繼承。JavaScript使用函數(shù)方法和對(duì)象構(gòu)造,這意味著將函數(shù)特性和功能整合到類中是以一種相互關(guān)聯(lián)的方式進(jìn)行邏輯排列和業(yè)務(wù)規(guī)則介紹。

 

小結(jié)

將相關(guān)函數(shù)整合于類并將其轉(zhuǎn)換為顯式的面向?qū)ο竽J?,有助于提高代碼的模塊性和長期重復(fù)使用率。

與嘗試跟蹤作用域和繼承相比,在不同代碼段之間設(shè)立的清晰邊界和現(xiàn)有關(guān)系也可以更快地識(shí)別問題區(qū)域和邏輯缺陷。

所以,不是所有代碼都必須是“類”,但很多編寫的代碼應(yīng)該是“類”。

 

責(zé)任編輯:華軒 來源: 讀芯術(shù)
相關(guān)推薦

2017-06-19 17:22:20

JavaCode Style持續(xù)交付

2014-06-18 10:41:31

Android多任務(wù)機(jī)制

2021-11-23 21:03:47

代碼電腦False

2013-08-21 14:23:59

2020-11-19 08:58:00

程序員數(shù)字強(qiáng)迫癥

2009-08-17 09:38:12

ASP.NET前臺(tái)控件

2020-06-04 08:16:56

代碼編碼庫開發(fā)

2020-07-10 09:00:31

硬盤數(shù)據(jù)SSD

2019-08-29 11:30:36

2011-05-04 09:27:45

系統(tǒng)管理員強(qiáng)迫癥

2021-12-21 08:12:01

Web JavaScriptCSS

2022-01-14 15:13:36

支付寶App消息“刷子”

2021-11-02 14:35:56

微軟Windows 11Windows

2023-10-08 13:10:24

2022-01-14 07:46:02

Windows 11操作系統(tǒng)微軟

2020-08-10 08:38:43

機(jī)房布線顏色

2020-12-17 06:06:08

微信朋友圈廣告

2017-10-31 15:52:44

搭建攻略平臺(tái)

2015-07-22 11:24:00

2021-05-11 11:31:52

C語言類型指針
點(diǎn)贊
收藏

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