国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解Javascript 中的 class、構造函數、工廠函數

2024-05-06 15:23:25
字體:
來源:轉載
供稿:網友

到了ES6時代,我們創建對象的手段又增加了,在不同的場景下我們可以選擇不同的方法來建立。現在就主要有三種方法來構建對象,class關鍵字,構造函數,工廠函數。他們都是創建對象的手段,但是卻又有不同的地方,平時開發時,也需要針對這不同來選擇。

首先我們來看一下,這三種方法是怎樣的

// class 關鍵字,ES6新特性class ClassCar { drive () {  console.log('Vroom!'); }}const car1 = new ClassCar();console.log(car1.drive());// 構造函數function ConstructorCar () {}ConstructorCar.prototype.drive = function () { console.log('Vroom!');};const car2 = new ConstructorCar();console.log(car2.drive());// 工廠函數const proto = { drive () {  console.log('Vroom!'); }};function factoryCar () { return Object.create(proto);}const car3 = factoryCar();console.log(car3.drive());

這些方法都是基于原型的創建,而且都支持在構造時函數中私有變量的實現。換句話來說,這些函數擁有著大部分相同的特性,甚至在很多場景下,他們是等價的。

在 Javascript 中,每一個函數都能返回一個新的對象。當它不是構造函數或者類的時候,它就被稱作工廠函數。

ES6的類其實是構造函數的語法糖(至少現階段是這樣實行的),所以接下來討論的所有內容都適用于構造函數的也適用于ES6類:

class Foo {}console.log(typeof Foo); // function

構造函數和ES6類的好處

大部分的書會教你去用類和構造函數 ‘ this ' 是指向新的這個對象的。 一些人喜歡 new 關鍵字的可讀性 也許還會有一些很小的細節方面的差別,但是如果在開發過程中沒有問題的話,也不用太擔心。

構造函數和ES6類的壞處

1. 你需要 new 關鍵字

到了ES6,構造函數和類都需要帶 new 關鍵字。

function Foo() { if (!(this instanceof Foo)) { return new Foo(); }}

在ES6中,如果你嘗試調用類函數沒有 new 關鍵字就會拋出一個任務。如果你要個不用 new 關鍵字的話,就只能使用工廠函數把它包起來。

2. 實例化過程中的細節暴露給了外界API

所有的調用都緊緊的關聯到了構造器的實現上,如果你需要自己在構造過程中動一些手腳,那就是一個非常麻煩的事情了。

3. 構造器沒有遵守 Open / Closed 法則

因為 new 關鍵字的細節處理,構造器違反 Open / Closed 法則:API應該開放拓展,避免修改。

我曾經質疑過,類和工廠函數是那么的相似,把類函數升級為一個工廠函數也不會有什么影響,不過在JavaScript里面,的確有影響。

如果你開始寫著構造函數或者類,但是寫著寫著,你發現需要工廠函數的靈活性,這個時候你不能簡單的就改改簡單改改函數一走了之。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 高碑店市| 古交市| 新乡县| 新安县| 拉孜县| 黄石市| 循化| 宣武区| 兴仁县| 呼图壁县| 浠水县| 平阴县| 绥中县| 巴彦县| 汉川市| 卫辉市| 凤冈县| 革吉县| 扬中市| 琼结县| 金乡县| 大安市| 丁青县| 利津县| 从江县| 甘谷县| 油尖旺区| 株洲县| 绵竹市| 山东省| 勃利县| 稻城县| 收藏| 洪雅县| 勐海县| 河池市| 利辛县| 特克斯县| 西贡区| 遵化市| 民勤县|