新建乙個people.js檔案,在people.js中寫入**如下建立了乙個people類,並對外暴露export default class people
peoplerun()
static sayenglish()
}
constructor
方法是類的預設方法,通過new
命令生成物件例項時,自動呼叫該方法。乙個類必須有constructor
方法,如果沒有顯式定義,乙個空的constructor
方法會被預設新增乙個空函式。constructor
方法預設返回例項物件(即this
),完全可以指定返回另外乙個物件。例如如下**上面**中,class foo
}new foo() instanceof foo // false
constructor
函式返回了乙個全新的物件,結果導致例項物件不是foo
類的例項。
類相當於例項的原型,所有在類中定義的方法,都會被例項繼承。如果在乙個方法前,加上static
關鍵字,就表示該方法不會被例項繼承,而是直接通過類來呼叫,這就稱為「靜態方法」。在people中sayenglish就是個靜態方法,該方法不會被例項繼承,例項中無法呼叫
類的例項化很簡單,直接在需要用到的地方引入並且new出乙個例項物件即可與 es5 一樣,類的所有例項共享乙個原型物件。如下**將輸出trueimport people from './util/people'
let people = new people('張三',19);
people.peoplerun(); //控制台列印peoplerun
var people1= new people('張三',3);
var people2= new people('李四',2);
people1.__proto__ === people2.__proto__ //true
class 可以通過extends
關鍵字實現繼承,這比 es5 的通過修改原型鏈實現繼承,要清晰和方便很多。新建乙個boy.js檔案,**如下
以上**建立了乙個boy類並且繼承了people類import people from "./people";
export default class boy extends people
boysay()
}
需要注意的地方是,在子類的建構函式中,只有呼叫
super
之後,才可以使用this
關鍵字,否則會報錯。這是因為子類例項的構建,基於父類例項,只有super
方法才能呼叫父類例項。以上**例項化了乙個boy並且呼叫了自身的boysay方法和繼承來的peoplerun方法import boy from './util/boy'
let boy = new boy();
boy.peoplerun();//控制台列印peoplerun
boy.boysay();//控制台列印boysay
mixin 指的是多個物件合成乙個新的物件,新物件具有各個組成成員的介面。它的最簡單實現如下。上面**中,const a = ;
const b = ;
const c = ; //
c
物件是a
物件和b
物件的合成,具有兩者的介面。下面我們來實現乙個更完備的實現,將多個類的介面「混入」(mix in)另乙個類:
我們在新建乙個dog類,新建檔案dog.js**如下
接下來我們在新建乙個mix類,用來繼承dog和boy類export default class dog extends null
dogsay()
}
新建檔案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()
}
下面我們來吧實現多繼承的兩個函式封裝到我們的extend類裡面,方便復用,新建extend.js檔案,**如下import mixtest from './util/mix'
let mixtest = new mixtest('小李',10);
mixtest.peoplerun();//報錯,無法呼叫
mixtest.boysay();//控制台列印boysay
mixtest.dogsay();//控制台列印汪汪汪
接著吧mix.js**改為如下:let copyproperties = (target, source)=>
}}export default class extend) }}
for (let mixin of mixins)
return mix;
}}
例項化mixtest類是一樣的操作,得到的效果也一樣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()
}
最後在貼上大神 阮一峰大神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 ...