首頁技術文章正文

ES6 的 class 和構造函數(shù)的區(qū)別

更新時間:2021-07-21 來源:黑馬程序員 瀏覽量:

IT培訓班

class 的寫法只是語法糖,和之前 prototype 差不多,但還是有細微差別的,下面看看:

嚴格模式
類和模塊的內(nèi)部,默認就是嚴格模式,所以不需要使用use strict指定運行模式。只要你的代碼寫在類或模塊之中,就只有嚴格模式可用。考慮到未來所有的代碼,其實都是運行在模塊之中,所以 ES6 實際上把整個語言升級到了嚴格模式。

不存在提升
類不存在變量提升(hoist),這一點與 ES5 完全不同。

new Foo(); // ReferenceError
class Foo {}

方法默認是不可枚舉的
ES6 中的 class,它的方法(包括靜態(tài)方法和實例方法)默認是不可枚舉的,而構造函數(shù)默認是可枚舉的。細想一下,這其實是個優(yōu)化,讓你在遍歷時候,不需要再判斷 hasOwnProperty 了

1626847614824_class-和構造函數(shù)的區(qū)別.jpg


class 的所有方法(包括靜態(tài)方法和實例方法)都沒有原型對象 prototype,所以也沒有[[construct]],不能使用 new 來調(diào)用。

class 必須使用 new 調(diào)用,否則會報錯。這是它跟普通構造函數(shù)的一個主要區(qū)別,后者不用 new 也可以執(zhí)行。

ES5 和 ES6 子類 this 生成順序不同
ES5 的繼承先生成了子類實例,再調(diào)用父類的構造函數(shù)修飾子類實例。ES6 的繼承先 生成父類實例,再調(diào)用子類的構造函數(shù)修飾父類實例。這個差別使得 ES6 可以繼承內(nèi)置對象。

ES6可以繼承靜態(tài)方法,而構造函數(shù)不能





猜你喜歡:

ES6 symbol數(shù)據(jù)類型

jQuery元素內(nèi)容操作的方法有多少種?

企業(yè)級微信小程序的開發(fā)與應用【黑馬程序員教程】

黑馬程序員web前端開發(fā)培訓

分享到:
在線咨詢 我要報名
和我們在線交談!