es6 新加了class類供汛,類實際上是個“特殊的函數(shù)”讲逛,就像你能夠定義的函數(shù)表達式和函數(shù)聲明一樣,使用方法類似這樣
class a{
constructor(props){//如果是父類构拳,不用寫super
super(props)
}
xxxx
}
- 先說下super是做什么的掠哥,簡單來說,就是有三種用法(一般都是第一種)球拦。
- 第一種
//super(props)
class sn{
r(){
alert(2)
}
};
class a extends sn{
constructor(props){
super(props);
this.r()
}
}
var s=new a();//結果是alert(2)
- 第二種
//super()作為對象調(diào)用靠闭,指代父類
class sn{
r(){
alert(2)
}
};
class a extends sn{
constructor(){
super();
super.r()
}
}
var s=new a();//結果是alert(2)
- 第三種
//super()作為函數(shù)調(diào)用邓夕,指代父類(sn)的構造函數(shù)
class sn{
constructor(){
alert(2)
}
};
class a extends sn{
constructor(){
super()
}
}
var s=new a();//結果是alert(2)
函數(shù)聲明和類聲明之間的一個重要區(qū)別是函數(shù)聲明會[聲明提升],類聲明不會阎毅。你首先需要聲明你的類焚刚,然后訪問它,否則會拋出一個[ReferenceError]扇调。
類聲明 默認的函數(shù)都是在prototype上面.
class Scc {}
class a extends Scc {
constructor(props){
super(props);
this.sss=2
}
b(){
console.log('this is b')
}
}
console.log(a.prototype)//Scc {constructor: function, b: function}
console.log(new a().sss)// 2
- static 靜態(tài)方法
類聲明里面的函數(shù)通過實例化之后 才能調(diào)用矿咕,除非用static 靜態(tài)方法,可以直接調(diào)用狼钮。靜態(tài)方法不能通過實例調(diào)用碳柱,而是直接通過類來調(diào)用
class Scc {
static a(){
console.log('this is static a')
}
}
console.log(Scc.a()) // 輸出 this is static a
- 使用 extends 創(chuàng)建子類
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' makes a noise.');
}
}
class Dog extends Animal {
speak() {
console.log(this.name + ' barks.');
}
}
var d = new Dog('Mitzie');
// 'Mitzie barks.'
d.speak();
如果子類中的constructor中有用到this,必須在此之前調(diào)用super()