更新時間:2021-07-21 來源:黑馬程序員 瀏覽量:
class 的寫法只是語法糖,和之前 prototype 差不多,但還是有細(xì)微差別的,下面看看:
嚴(yán)格模式
類和模塊的內(nèi)部,默認(rèn)就是嚴(yán)格模式,所以不需要使用use strict指定運行模式。只要你的代碼寫在類或模塊之中,就只有嚴(yán)格模式可用??紤]到未來所有的代碼,其實都是運行在模塊之中,所以 ES6 實際上把整個語言升級到了嚴(yán)格模式。
不存在提升
類不存在變量提升(hoist),這一點與 ES5 完全不同。
new Foo(); // ReferenceError class Foo {}
方法默認(rèn)是不可枚舉的
ES6 中的 class,它的方法(包括靜態(tài)方法和實例方法)默認(rèn)是不可枚舉的,而構(gòu)造函數(shù)默認(rèn)是可枚舉的。細(xì)想一下,這其實是個優(yōu)化,讓你在遍歷時候,不需要再判斷 hasOwnProperty 了
class 的所有方法(包括靜態(tài)方法和實例方法)都沒有原型對象 prototype,所以也沒有[[construct]],不能使用 new 來調(diào)用。
class 必須使用 new 調(diào)用,否則會報錯。這是它跟普通構(gòu)造函數(shù)的一個主要區(qū)別,后者不用 new 也可以執(zhí)行。
ES5 和 ES6 子類 this 生成順序不同
ES5 的繼承先生成了子類實例,再調(diào)用父類的構(gòu)造函數(shù)修飾子類實例。ES6 的繼承先 生成父類實例,再調(diào)用子類的構(gòu)造函數(shù)修飾父類實例。這個差別使得 ES6 可以繼承內(nèi)置對象。
ES6可以繼承靜態(tài)方法,而構(gòu)造函數(shù)不能