1 回答

TA貢獻1871條經驗 獲得超8個贊
關于“構造函數+對象”,你其實缺的是有關“類”的知識,關于這個,我在求問js 中的類究竟是什么意思?已經答過,自己閱讀吧
補充:
如果你懂“類”是什么,那這個問題本來就不應該存在了。秉承好人做到底的原則,還是簡單說兩句吧。
雖然無論函數,還是類都講求單一職責,但顯然力度不同。當我們使用函數時,通常希望這個函數是“單純的”,即:不依賴上下文,譬如:
var sum = function(x, y){ return x + y; };
這個函數只要我輸入的參數是
2, 3
,返回值永遠都是5
??蓽y試、可預料。簡單直接(當然函數也可以完成先對復雜的工作,這個就看寫作人對需求的認識、對代碼的理解了)
而當面對“類”時,她是完全“不單純”的,即:“類”就是創造了一個上下文,供各個實例對象使用;為什么要提供上下文,是因為“類”提供的是一系列相關行為,單一職責在這里顯然力度更廣,為什么是一系列行為,這其實就是人們常說的“高內聚”。打個比方,我現在寫一個動物類:
class Animal { constructor(type){ this.type = type; } movo(){ console.log(`I am ${this.type}, i can run`); } }var cat = new Animal('cat');var dog = new Animal('dog'); cat.move();//I am cat, i can rundog.move();//I am dog, i can run
兩個不同的類,
cat
和dog
,都調用了move
方法,參數都沒有傳,但顯然輸出內容不一樣了,因為這里依賴了上下文this.type
。但這樣一個“動物”的使用場景,如果改用函數,怎么描述一個“貓”更合適?顯然比較困難
再次補充:
最后再談幾句關于模塊的事情,模塊通常用來組織代碼,和函數、類是不同緯度的工具,舉個例子:
在java 9
中,模塊類似命名空間,可以把若干有邏輯關聯的類歸在同一個模塊下,方便他人使用(這里的方便他人使用,就是“組織”相關的工作)。
又或者,在javascript
中,模塊可以是一個函數(例如之前很火的left-pad),也可以是一個類(比如:bl)甚至可以是一大堆函數和類的集合(比如:express)。完全取決于你希望你的代碼怎么樣被組織、使用
添加回答
舉報