亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js的函數與對象有一個不明白的地方

js的函數與對象有一個不明白的地方

大話西游666 2018-08-16 10:09:05
函數可以理解為需要重復執行的代碼塊。不同的地方可以進行傳參。構造函數加new關鍵字似乎可以起到函數相似的作用。我想問的是,函數與構造函數+對象這兩種有什么相同點和不同點。什么時候使用函數?什么時候使用構造函數+對象的形式。
查看完整描述

1 回答

?
ITMISS

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

兩個不同的類,catdog,都調用了move方法,參數都沒有傳,但顯然輸出內容不一樣了,因為這里依賴了上下文this.type。但這樣一個“動物”的使用場景,如果改用函數,怎么描述一個“貓”更合適?顯然比較困難

再次補充:

最后再談幾句關于模塊的事情,模塊通常用來組織代碼,和函數、類是不同緯度的工具,舉個例子:

java 9中,模塊類似命名空間,可以把若干有邏輯關聯的類歸在同一個模塊下,方便他人使用(這里的方便他人使用,就是“組織”相關的工作)。

又或者,在javascript中,模塊可以是一個函數(例如之前很火的left-pad),也可以是一個類(比如:bl)甚至可以是一大堆函數和類的集合(比如:express)。完全取決于你希望你的代碼怎么樣被組織、使用


查看完整回答
反對 回復 2018-09-17
  • 1 回答
  • 0 關注
  • 553 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號