ES6中Class的一些基本用法

2021-09-28 15:21:10 字數 3520 閱讀 7244

新建乙個people.js檔案,在people.js中寫入**如下

export default class people

peoplerun()

static sayenglish()

}

建立了乙個people類,並對外暴露 

constructor方法是類的預設方法,通過new命令生成物件例項時,自動呼叫該方法。乙個類必須有constructor方法,如果沒有顯式定義,乙個空的constructor方法會被預設新增乙個空函式。constructor方法預設返回例項物件(即this),完全可以指定返回另外乙個物件。例如如下**

class foo

}new foo() instanceof foo // false

上面**中,constructor函式返回了乙個全新的物件,結果導致例項物件不是foo類的例項。 

類相當於例項的原型,所有在類中定義的方法,都會被例項繼承。如果在乙個方法前,加上static關鍵字,就表示該方法不會被例項繼承,而是直接通過類來呼叫,這就稱為「靜態方法」。在people中sayenglish就是個靜態方法,該方法不會被例項繼承,例項中無法呼叫

類的例項化很簡單,直接在需要用到的地方引入並且new出乙個例項物件即可

import people from './util/people'

let people = new people('張三',19);

people.peoplerun(); //控制台列印peoplerun

與 es5 一樣,類的所有例項共享乙個原型物件。如下**將輸出true

var people1= new people('張三',3);

var people2= new people('李四',2);

people1.__proto__ === people2.__proto__ //true

class 可以通過extends關鍵字實現繼承,這比 es5 的通過修改原型鏈實現繼承,要清晰和方便很多。

新建乙個boy.js檔案,**如下

import people from "./people";

export default class boy extends people

boysay()

}

以上**建立了乙個boy類並且繼承了people類 

需要注意的地方是,在子類的建構函式中,只有呼叫super之後,才可以使用this關鍵字,否則會報錯。這是因為子類例項的構建,基於父類例項,只有super方法才能呼叫父類例項。

import boy from './util/boy'

let boy = new boy();

boy.peoplerun();//控制台列印peoplerun

boy.boysay();//控制台列印boysay

以上**例項化了乙個boy並且呼叫了自身的boysay方法和繼承來的peoplerun方法

mixin 指的是多個物件合成乙個新的物件,新物件具有各個組成成員的介面。它的最簡單實現如下。

const a = ;

const b = ;

const c = ; //

上面**中,c物件是a物件和b物件的合成,具有兩者的介面。

下面我們來實現乙個更完備的實現,將多個類的介面「混入」(mix in)另乙個類:

我們在新建乙個dog類,新建檔案dog.js**如下

export default class dog extends null

dogsay()

}

接下來我們在新建乙個mix類,用來繼承dog和boy類

新建檔案mix.js**如下

function mix(...mixins) ) }}

for (let mixin of mixins)

return mix;

} function copyproperties(target, source)

}}//類的構建

import boy from './boy'//引入boy類

import dog from './dog'//dog類

export default class mixtest extends mix(boy, dog)

minsay()

}

例項化如下

import mixtest from './util/mix'

let mixtest = new mixtest('小李',10);

mixtest.peoplerun();//報錯,無法呼叫

mixtest.boysay();//控制台列印boysay

mixtest.dogsay();//控制台列印汪汪汪

下面我們來吧實現多繼承的兩個函式封裝到我們的extend類裡面,方便復用,新建extend.js檔案,**如下

let copyproperties = (target, source)=> 

}}export default class extend) }}

for (let mixin of mixins)

return mix;

}}

接著吧mix.js**改為如下:

import extend from './extend.js'//引入繼承類

let extend = new extend()//例項化乙個繼承類

//類的構建

import boy from './boy'//引入boy類

import dog from './dog'//dog類

export default class mixtest extends extend.mixextend(boy, dog)

minsay()

}

例項化mixtest類是一樣的操作,得到的效果也一樣

最後在貼上大神  阮一峰大神es6部落格鏈結方便接下來進一步學習 

es6中class的使用

以前剛接觸程式設計時就聽得最多的就是物件導向程式設計,但後來工作後能通過物件導向程式設計的少之又少,現在企業裡的開發做的都是業務邏輯,牽扯到的多半是業務 最近做了個編輯器的功能,裡面使用了物件導向程式設計的思想,讓我頗有感觸,所以學好class作為基礎還是很重要的。class people 等同於 ...

es6的一些技巧

1,強制要求引數 es6 有預設引數設定機制 允許在入參的括號裡給引數賦予預設值 防止函式在呼叫時沒有傳參 我們知道在js函式在入參的時候是入幾個都可以的 這就給了我們發揮的空間,我們來強制要求引數必須有 否則就報錯 const required const add a required b req...

es6的一些筆記

new set 用來去重陣列。let arr 1,2,2,3 let set new set arr let newarr array.from set console.log newarr 1,2,3 set類似於陣列,區別在於它所有的成員都是唯一的,不能有重複的值 展開運算子 合併陣列 let ...