es5 類(lèi)與es6中class的區(qū)別小結(jié)
前言
在es5中主要是通過(guò)構(gòu)造函數(shù)方式和原型方式來(lái)定義一個(gè)類(lèi),在es6中我們可以通過(guò)class來(lái)定義類(lèi),今天整理一下它們的區(qū)別。
關(guān)于es5中定義類(lèi)的方式,可以看這一篇Js的‘類(lèi)',我們這里主要聊es5類(lèi)和es6中class類(lèi)的區(qū)別。
一、class類(lèi)必須new調(diào)用,不能直接執(zhí)行。
class類(lèi)執(zhí)行的話(huà)會(huì)報(bào)錯(cuò),而es5中的類(lèi)和普通函數(shù)并沒(méi)有本質(zhì)區(qū)別,執(zhí)行肯定是ok的。
二、class類(lèi)不存在變量提升
圖2報(bào)錯(cuò),說(shuō)明class方式?jīng)]有把類(lèi)的定義提升到頂部。
三、class類(lèi)無(wú)法遍歷它實(shí)例原型鏈上的屬性和方法
function Foo (color) { this.color = color } Foo.prototype.like = function () { console.log(`like${this.color}`) } let foo = new Foo() for (let key in foo) { // 原型上的like也被打印出來(lái)了 console.log(key) // color、like }
class Foo { constructor (color) { this.color = color } like () { console.log(`like${this.color}`) } } let foo = new Foo('red') for (let key in foo) { // 只打印一個(gè)color,沒(méi)有打印原型鏈上的like console.log(key) // color }
四、new.target屬性
es6為new命令引入了一個(gè)new.target屬性,它會(huì)返回new命令作用于的那個(gè)構(gòu)造函數(shù)。如果不是通過(guò)new調(diào)用或Reflect.construct()調(diào)用的,new.target會(huì)返回undefined
function Person(name) { if (new.target === Person) { this.name = name; } else { throw new Error('必須使用 new 命令生成實(shí)例'); } } let obj = {} Person.call(obj, 'red') // 此時(shí)使用非new的調(diào)用方式就會(huì)報(bào)錯(cuò)
五、class類(lèi)有static靜態(tài)方法
static靜態(tài)方法只能通過(guò)類(lèi)調(diào)用,不會(huì)出現(xiàn)在實(shí)例上;另外如果靜態(tài)方法包含 this 關(guān)鍵字,這個(gè) this 指的是類(lèi),而不是實(shí)例。static聲明的靜態(tài)屬性和方法都可以被子類(lèi)繼承。
class Foo { static bar() { this.baz(); // 此處的this指向類(lèi) } static baz() { console.log('hello'); // 不會(huì)出現(xiàn)在實(shí)例中 } baz() { console.log('world'); } } Foo.bar() // hello
總結(jié)
到此這篇關(guān)于es5 類(lèi)與es6中class的區(qū)別的文章就介紹到這了,更多相關(guān)es5類(lèi)與es6中class區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用JavaScript實(shí)現(xiàn)彈出層效果的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇使用JavaScript實(shí)現(xiàn)彈出層效果的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05Canvas實(shí)現(xiàn)動(dòng)態(tài)粒子文字效果的代碼示例
這篇文章主要介紹了如何用Canvas實(shí)現(xiàn)動(dòng)態(tài)粒子文字效果,文中有完整的代碼示例,文章通過(guò)代碼介紹的非常清楚,感興趣的小伙伴跟著小編一起來(lái)看看吧2023-08-08js實(shí)現(xiàn)黑白div塊畫(huà)空心的圖形
這篇文章主要介紹了js實(shí)現(xiàn)黑白div塊畫(huà)空心的圖形,畫(huà)出矩形、三角形、菱形、圓形,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12淺談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL
下面小編就為大家?guī)?lái)一篇淺談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06javascript下function聲明一些小結(jié)
function聲明一些東西,我們都知道function和var一樣是預(yù)處理的在js里面,但是到底什么是函數(shù)聲明呢,我們來(lái)看幾個(gè)例子2007-12-12Js生成隨機(jī)數(shù)/隨機(jī)字符串的方法小結(jié)【5種方法】
這篇文章主要介紹了Js生成隨機(jī)數(shù)/隨機(jī)字符串的方法,結(jié)合實(shí)例形式總結(jié)分析了5種Js生成隨機(jī)數(shù)/隨機(jī)字符串的操作技巧,需要的朋友可以參考下2020-05-05基于JavaScript實(shí)現(xiàn)雪花許愿墻特效
新的一年就要到了,你一定有很多想許下的愿望吧!今天小編就為大家?guī)?lái)了一個(gè)基于Html+CSS+JavaScript實(shí)現(xiàn)的帶雪花的許愿墻特效,需要的可以了解一下2022-01-01