首頁技術(shù)文章正文

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

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

IT培訓(xùn)班

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

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

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

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

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

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


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

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

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

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





猜你喜歡:

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

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

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

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

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!