摘要:重點(diǎn)在于構(gòu)造函數(shù),使用的是構(gòu)造函數(shù)來模擬類。使用創(chuàng)建子類由于是在類中定義,關(guān)鍵字可以省去創(chuàng)建父類類不可繼承沒有構(gòu)造函數(shù)的對(duì)象如果一個(gè)對(duì)象沒有構(gòu)造函數(shù),將不能進(jìn)行繼承。
js 的class
由于存在轉(zhuǎn)換器這種神器,所以代碼能直接轉(zhuǎn)換為es5,用es6的語法寫。
js的class僅僅為一個(gè)語法糖,是在原先構(gòu)造函數(shù)的基礎(chǔ)上出現(xiàn)的class,僅僅如此。所以使用構(gòu)造函數(shù)構(gòu)造類,或者使用class語法糖構(gòu)造類都是相同的。具體還是使用prototype和this來進(jìn)行模擬類。
重點(diǎn)在于構(gòu)造函數(shù),使用的是構(gòu)造函數(shù)來模擬類。類聲明
需要聲明一個(gè)類,需要使用class
class Rectangle { constructor(height, width) { this.height = height; this.width = width; } }
和函數(shù)聲明的最大的區(qū)別在于,類聲明,不會(huì)出現(xiàn)聲明提前,函數(shù)聲明會(huì)出現(xiàn)聲明提前,這是兩者最大的區(qū)別。
在上方中,聲明類以后,新建一個(gè)對(duì)象。
let rectAngle = new Rectangle
該對(duì)象具有constructor方法。
匿名類和匿名函數(shù)類似,類依舊可以進(jìn)行匿名聲明
let Rectangle = class { constructor(height, width) { this.height = height; this.width = width; } }
在類表達(dá)式中,同樣會(huì)出現(xiàn)類聲明提升的問題。constructor
為一個(gè)構(gòu)造函數(shù),用于初始化class并創(chuàng)建一個(gè)對(duì)象
即為原先學(xué)習(xí)的構(gòu)造函數(shù),函數(shù)為對(duì)象,對(duì)象為函數(shù)。
class Rectangle { // 構(gòu)造函數(shù) constructor(height, width) { this.height = height; this.width = width; }; // get 方法即調(diào)用將會(huì)返回的值 get area() { return this.calcArea(); }; // 定義calcArea函數(shù) calcArea() { return this.height * this.width; } }
上方定義了一個(gè)類如果需要使用
const square = new Rectangle(); console.log(square.area);
即可完成對(duì)類的使用。
static為一個(gè)靜態(tài)方法,該靜態(tài)new出的來的對(duì)象不能進(jìn)行使用。
常常用于工具函數(shù)的書寫
class Point { constructor(x, y){ this.x = x; this.y = y; }; static distance(a, b){ const dx = a.x - b.x; const dy = a.y - b.y; return Math.hypot(dx, dy); // 畢達(dá)哥拉斯定理 } } // 使用 const p1 = new Point(5,5); const p2 = new Point(10,10); console.log(Point.distance(p1,p2));關(guān)于嚴(yán)格模式
由于js存在嚴(yán)格模式,并且上面的內(nèi)容在嚴(yán)格模式下執(zhí)行,如果該對(duì)象沒有this的值,將不會(huì)返回其本身。
傳統(tǒng)的使用prototype將會(huì)返回其本身,因?yàn)閭鹘y(tǒng)的不在嚴(yán)格模式下執(zhí)行。extends
使用extends創(chuàng)建子類
class Animal { constructor(name) { this.name = name; } speak() { // 由于是在類中定義,function關(guān)鍵字可以省去 console.log(this.name); } } // 創(chuàng)建DOg父類 class Dog extends Animal { speak() { console.log(this.name); } } let d = new Dog(); d.name = "ming" d.speak();類不可繼承沒有構(gòu)造函數(shù)的對(duì)象
如果一個(gè)對(duì)象沒有構(gòu)造函數(shù),將不能進(jìn)行繼承。
請(qǐng)使用
Object.create()
進(jìn)行創(chuàng)建給予對(duì)象的新對(duì)象
const a = { }; const b = Object.create(a); // 創(chuàng)建基于原型a的對(duì)象super
使用super調(diào)用超類
class Cat { constructor(name) { this.name = name; } speak() { console.log(); }; } class Lion extends Cat { speak() { super.speak(); } }
即使用super調(diào)用超類
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/108503.html
摘要:上例中打印的結(jié)果是對(duì)中的名都做了處理,使用對(duì)象來保存原和混淆后的對(duì)應(yīng)關(guān)系。結(jié)合實(shí)踐在處直接使用中名即可。如因?yàn)橹粫?huì)轉(zhuǎn)變類選擇器,所以這里的屬性選擇器不需要添加。 showImg(http://gtms01.alicdn.com/tps/i1/TB15w0HLpXXXXbdaXXXjhvsIVXX-600-364.png); CSS 是前端領(lǐng)域中進(jìn)化最慢的一塊。由于 ES2015/201...
摘要:概述上一章只是稍微了解了一下和相關(guān)的簡(jiǎn)單用法,這一章需要講一下組件的生命周期。生命周期的概念這玩意似乎很高大上,其實(shí)就是一個(gè)假概念罷了,直接來實(shí)現(xiàn)一個(gè)類似的吧。 0x000 概述 上一章只是稍微了解了一下state和setState相關(guān)的簡(jiǎn)單用法,這一章需要講一下組件的生命周期。 0x001 生命周期的概念 這玩意似乎很高大上,其實(shí)就是一個(gè)假概念罷了,直接來實(shí)現(xiàn)一個(gè)類似的吧。大凡事物從...
摘要:與基本屬性及用法在程序中稱類,同時(shí)在中也書面語也叫類。在樣式中以小寫的點(diǎn)及來命名如屬性屬性值而在頁面里則以來選擇調(diào)用命名好的又叫選擇器。也就是說只是頁面元素的標(biāo)識(shí),供其他元素腳本等引用。? ? 我們平常在用DIV CSS制作Xhtml網(wǎng)頁頁面時(shí),常會(huì)用到class 和id來選擇調(diào)用CSS樣式屬性。 CLASS與ID基本屬性及用法: Class 在程序中稱類,同時(shí)在CSS中也書面語也叫類。 ...
摘要:檢查元素是否已經(jīng)存在某下面的正則表達(dá)式用來檢查元素是否已經(jīng)存在某個(gè)使用操作使用操作現(xiàn)代瀏覽器都支持使用方法來操作元素的,但是中不支持該方法,即使使用了 添加className (1)修改元素的所有的 class 用新的 class 替換掉原有的所有 class,可以設(shè)置 className 屬性: document.getElementById(MyElement).className...
摘要:請(qǐng)看對(duì)應(yīng)版本干了什么可知,相當(dāng)于以前在構(gòu)造函數(shù)里的行為。這種寫法會(huì)與上文中寫法有何區(qū)別我們?cè)诃h(huán)境下運(yùn)行一下,看看這兩種構(gòu)造函數(shù)的有何區(qū)別打印結(jié)果打印結(jié)果結(jié)合上文中關(guān)于原型的論述,仔細(xì)品味這兩者的差別,最好手動(dòng)嘗試一下。 ES6 class 在ES6版本之前,JavaScript語言并沒有傳統(tǒng)面向?qū)ο笳Z言的class寫法,ES6發(fā)布之后,Babel迅速跟進(jìn),廣大開發(fā)者也很快喜歡上ES6帶...
閱讀 3027·2021-11-02 14:40
閱讀 843·2019-08-30 15:53
閱讀 1265·2019-08-30 15:53
閱讀 3259·2019-08-30 13:53
閱讀 3305·2019-08-29 12:50
閱讀 1131·2019-08-26 13:49
閱讀 1863·2019-08-26 12:20
閱讀 3660·2019-08-26 11:33