本文實(shí)例講述了ES6新特性之類(lèi)(Class)和繼承(Extends)相關(guān)概念與用法。分享給大家供大家參考,具體如下:
一、類(lèi)(Class)
1.基本語(yǔ)法
JavaScript語(yǔ)言的傳統(tǒng)方法是通過(guò)構(gòu)造函數(shù),定義并生成新對(duì)象。下面是一個(gè)例子
function Point(x, y) { this.x = x; this.y = y;}Point.prototype.toString = function () { return '(' + this.x + ', ' + this.y + ')';};var p = new Point(1, 2);ES6提供了更接近傳統(tǒng)語(yǔ)言的寫(xiě)法,引入了Class(類(lèi))這個(gè)概念,作為對(duì)象的模板。通過(guò)class關(guān)鍵字,可以定義類(lèi)。基本上,ES6的class可以看作只是一個(gè)語(yǔ)法糖,它的絕大部分功能,ES5都可以做到,新的class寫(xiě)法只是讓對(duì)象原型的寫(xiě)法更加清晰、更像面向?qū)ο缶幊痰恼Z(yǔ)法而已。上面的代碼用ES6的“類(lèi)”改寫(xiě),就是下面這樣。
//定義類(lèi)class Point { constructor(x, y) { //constructor 構(gòu)造方法 this.x = x; this.y = y; } toString() { return '(' + this.x + ', ' + this.y + ')'; }}var p = new Point(1, 2);構(gòu)造函數(shù)的prototype屬性,在ES6的“類(lèi)”上面繼續(xù)存在。事實(shí)上,類(lèi)的所有方法都還是定義在類(lèi)的prototype屬性上面。
2.constructor方法
constructor方法是類(lèi)的默認(rèn)方法,通過(guò)new命令生成對(duì)象實(shí)例時(shí),自動(dòng)調(diào)用該方法。一個(gè)類(lèi)必須有constructor方法,如果沒(méi)有顯式定義,一個(gè)空的constructor方法會(huì)被默認(rèn)添加。
二、繼承(Extends)
Class之間可以通過(guò)extends關(guān)鍵字實(shí)現(xiàn)繼承,這比ES5的通過(guò)修改原型鏈實(shí)現(xiàn)繼承,要清晰和方便很多。
class ColorPoint extends Point { constructor(x, y, color) { super(x, y); // 調(diào)用父類(lèi)的constructor(x, y) this.color = color; } toString() { return this.color + ' ' + super.toString(); // 調(diào)用父類(lèi)的toString() }}上面代碼中,constructor方法和toString方法之中,都出現(xiàn)了super關(guān)鍵字,它在這里表示父類(lèi)的構(gòu)造函數(shù),用來(lái)新建父類(lèi)的this對(duì)象。
子類(lèi)必須在constructor方法中調(diào)用super方法,否則新建實(shí)例時(shí)會(huì)報(bào)錯(cuò)。這是因?yàn)樽宇?lèi)沒(méi)有自己的this對(duì)象,而是繼承父類(lèi)的this對(duì)象,然后對(duì)其進(jìn)行加工。如果不調(diào)用super方法,子類(lèi)就得不到this對(duì)象。
三、原生構(gòu)造函數(shù)繼承
原生構(gòu)造函數(shù)是指語(yǔ)言?xún)?nèi)置的構(gòu)造函數(shù),通常用來(lái)生成數(shù)據(jù)結(jié)構(gòu)。ECMAScript的原生構(gòu)造函數(shù)大致有下面這些。以前,這些原生構(gòu)造函數(shù)是無(wú)法繼承的。
Boolean()
Number()
String()
Array()
Date()
Function()
RegExp()
Error()
Object()
ES6允許繼承原生構(gòu)造函數(shù)定義子類(lèi),因?yàn)镋S6是先新建父類(lèi)的實(shí)例對(duì)象this,然后再用子類(lèi)的構(gòu)造函數(shù)修飾this,使得父類(lèi)的所有行為都可以繼承。下面是一個(gè)繼承Array的例子。
新聞熱點(diǎn)
疑難解答
圖片精選