ES6

ES6深入浅出之新版的类

Posted by weite122 on 2019-01-09

定义类

  • 类实际上是个“特殊的函数”,就像你能够定义的函数表达式和函数声明一样,类语法有两个组成部分:类表达式和类声明。

类声明

  • 定义一个类的一种方法是使用一个类声明。要声明一个类,你可以使用带有class关键字的类名。

    1
    2
    3
    4
    5
    6
    class Rectangle {
    constructor(height, width) {
    this.height = height;
    this.width = width;
    }
    }

类表达式

  • 一个类表达式是定义一个类的另一种方式。类表达式可以是被命名的或匿名的。赋予一个命名类表达式的名称是类的主体的本地名称。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /* 匿名类 */ 
    let Rectangle = class {
    constructor(height, width) {
    this.height = height;
    this.width = width;
    }
    };

    /* 命名的类 */
    let Rectangle = class Rectangle {
    constructor(height, width) {
    this.height = height;
    this.width = width;
    }
    };

类体和方法定义

  • 一个类的类体是一对花括号/大括号 {} 中的部分。这是你定义类成员的位置,如方法或构造函数。

严格模式

  • 类声明和类表达式的主体都执行在严格模式下。比如,构造函数,静态方法,原型方法,getter和setter都在严格模式下执行。

构造函数

  • constructor方法是一个特殊的方法,其用于创建和初始化使用class创建的一个对象。一个类只能拥有一个名为 “constructor”的特殊方法。如果类包含多个constructor的方法,则将抛出 一个SyntaxError

  • 一个构造函数可以使用 super 关键字来调用一个父类的构造函数。

静态方法

  • static 关键字用来定义一个类的一个静态方法。调用静态方法不需要实例化该类,但不能通过一个类实例调用静态方法。静态方法通常用于为一个应用程序创建工具函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class Animal{
constructor(){
this.body = '身体'
this._race = '运物'
}
move(){
console.log('我能动')
}
get race(){
return this._race
}
set race(value){
this._race = value
}
//属性封装
}

class Person extends Animal{
constructor(name){
super() //this.body = '身体'
this._name = name
this._age = 18
this.body = this.body + '四肢'
}
walk(){
console.log('走两步')
}
static live(){
console.log('努力活下去')
}//
get age(){
return this._age
}//get控制只读属性
get name(){
return this._name
}
set name(v){
if(v.length>5){
console.log('名字太长')
}else{
this._name = v
}
}
}

var p1 = new Person('weite122')

console.log(p1)

p1.race = "动物"
p1.race // 动物

p1.name = "frank2121"//名字太长
p1.name = "xxx" //xxx

p1.live()// undefined
Person.live()//"努力活下去"