ES6 之 Class 类

  • class (类)作为对象的模板被引入,可以通过 class 关键字定义类。
  • class 的本质是 function。
  • 它可以看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。

类定义:类表达式可以为匿名或命名。

// 匿名类
let Example = class {
	constructor(props){
	}
}

// 但若是
class {
    constructor(props) {
       
    }
}
// SyntaxError: Unexpected token '{'

// 命名类
let Example = class Example{}
或
class Example{}

类声明:类不可重复声明

class Example{}
class Example{}
// Uncaught SyntaxError: Identifier 'Example' has already been declared

let Example = class{}
class Example{}
// Uncaught SyntaxError: Identifier 'Example' has already been declared

类定义不会被提升,必须在访问之前对类进行定义,否则会报错。
类中方法不需要function关键字。

类的主体

属性:prototype

ES6 中,prototype 仍旧存在,虽然可以直接自类中定义方法,但是其实方法还是定义在 prototype 上的。 覆盖方法 / 初始化时添加方法。

class Example{}
Example.prototype={
    //methods
}

Object.assign(Example.prototype,{
    //methods
})
静态属性
class Example {
// 新提案
    static a = 2;
}
console.log(Example.a) // 2

// 目前可行写法
Example.b = 2;
console.log(Example.b) // 2
公共属性
class Example{}
Example.prototype.a = 2;
实例属性:定义在实例对象( this )上的属性。
class Example {
    a = 2;
    constructor () {
        console.log(this.a);
    }
}
name 属性:返回跟在 class 后的类名(存在时)。
let Example=class Exam {
    constructor(a) {
        this.a = a;
    }
}
console.log(Example.name); // Exam
 
let Example=class {
    constructor(a) {
        this.a = a;
    }
}
console.log(Example.name); // Example

方法

constructor 方法是类的默认方法,创建类的实例化对象时被调用。
class Example{
    constructor(){
      console.log('我是constructor');
    }
}
new Example(); // 我是constructor
静态方法
class Example{
    static sum(a, b) {
        console.log(a+b);
    }
}
Example.sum(1, 2); // 3
原型方法
class Example {
    sum(a, b) {
        console.log(a + b);
    }
}
let exam = new Example();
exam.sum(1, 2); // 3
实例方法
class Example {
    constructor() {
        this.sum = (a, b) => {
            console.log(a + b);
        }
    }
}

类的实例化

new:class 的实例化必须通过 new 关键字。

class Example {}
 
let exam1 = Example(); 
// Class constructor Example cannot be invoked without 'new'

let exam1 = new Example(); 

extends:通过 extends 实现类的继承

class Child extends Father { ... }
上一篇:ES6 Class


下一篇:Java反射三:反射的核心类:Constructor构造方法类