ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到。
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
}
run() {}
}
类的修饰符
- public:代表定义的变量内部与外部都可以访问,默认不写就是public
- private:代表定义的变量是私有的,只能在内部访问
- protected:代表定义的变量是受保护,只能在内部和继承的子类中访问
class Person {
private name: string;
protected age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
run() {}
}
let lisi = new Person("李四", 24);
lisi.name; //属性“name”为私有属性,只能在类“Person”中访问
lisi.age; //属性“age”受保护,只能在类“Person”及其子类中访问
class Man extends Person {
constructor() {
super("李四", 24);
this.age = 35;
}
}
let man = new Man();
static
- 静态属性:使用static定义的属性,不能通过this去访问,只能通过类名去调用。
- 静态方法:使用static定义的方法,不能通过this去访问,只能通过类名去调用。如果两个方法都是static方法就可以互相调用
class Person {
name: string;
age: number;
static sex: string = "男";
constructor(name: string, age: number) {
this.age = age;
this.name = name;
}
static run() {
this.build();
}
static build() {
this.run();
}
}
Person.sex;
Person.run();
interface:定义类使用关键字implements,后面跟多个interface
的名字(使用,隔开)
interface PersonClass {
get(type: boolean): boolean;
}
interface PersonClass2 {
set(): void;
name: string;
}
class A {
name: string;
constructor() {
this.name = "张三";
}
}
class Person extends A implements PersonClass, PersonClass2 {
name = "John";
constructor() {
super();
}
get(type: boolean) {
return false;
}
set() {}
}
抽象类:应用场景:写的类实例化之后毫无用处,此时可以把它定义为抽象类,或者把它作为一个基类->通过继承一个派生类去实现基类的一些方法
abstract class A {
name: string;
constructor(name: string) {
this.name = name;
}
print(): string {
return this.name;
}
}
class B extends A {
constructor() {
super("张三");
}
getName(): string {
return this.name;
}
}
let b = new B();
b.getName();