0%

typeScript中的class

与ES6/ES7中不同的是,在TypeScript可以使用public、private 和 protected这三种访问修饰符。

public

public 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的

1
2
3
4
5
6
7
8
9
10
11
12
class Animal{
public name;
public constructor (name) {
this.name = name;
}
}

let a = new Animal('Jack')

console.log(a.name); // Jack
a.name = 'Tom';
console.log(a.name); // Tom

private

当我们希望有的属性是无法直接存取的,这时候就可以用 private 了

1
2
3
4
5
6
7
8
9
10
class Animal{
private name;
public constructor (name) {
this.name = name;
}
}

// let a = new Animal('Jack')

// a.name = 'Tom' //属性“name”为私有属性,只能在类“Animal”中访问

使用 private 修饰的属性或方法,在子类中也是不允许访问的:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Animal{
private name;
public constructor (name) {
this.name = name;
}
}

class Cat extends Animal {
constructor (name) {
super(name);
console.log(this.name) //属性“name”为私有属性,只能在类“Animal”中访问
}
}

protected

而如果是用 protected 修饰,则允许在子类中访问:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Animal {
protected name;
public constructor(name) {
this.name = name;
}
}

class Cat extends Animal {
constructor(name) {
super(name);
console.log(this.name); //no problem
}
}

抽象类( abstract )

abstract 用于定义抽象类和其中的抽象方法,并且不允许被实例化。其次抽象类中的抽象方法必须被子类实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
abstract class Animal {
public name;
public constructor(name) {
this.name = name;
}
public abstract sayHi();
}

class Cat extends Animal {
public sayHi() {
console.log(`Meow, My name is ${this.name}`);
}
}

let cat = new Cat('Tom');