访问修饰符和参数属性
- 2019-1-12
- Web Typescript
Typescript 在类的语法上和 Java 比较类似,仅仅个别地方有些不一样(比如 typescript 的构造函数名不是使用类名而是简单粗暴地直接叫 constructor)。 这里,我将简单记录下我对 typescript 中访问修饰符和参数属性的理解。
访问修饰符(Access modifiers)
访问修饰符是面向对象语言中用于指定的类、方法和其它成员的访问权限的一组关键字。该词条在维基百科中的详细解释如下:
Access modifiers (or access specifiers) are keywords in object-oriented languages that set the accessibility of classes, methods, and other members. Access modifiers are a specific part of programming language syntax used to facilitate the encapsulation of components.
在 typescript 中,一共有3个访问修饰符(public、private 和 protected),并且与大多数其他编程语言不同的是,typescript 类成员的默认修饰符是 public,即类中的成员默认是公开的。
关于 public、private 和 protected 之间的区别,我们可以这样理解:public 修饰的成员是公开的,在程序的任何位置都可以访问到这些成员;protected 修饰的成员是属于家族的,只有在该类或其子类中才能访问到这些成员;private 修饰的成员是该类私有的,只有在该类中才能访问(注意该类的对象访问不了这些成员)。
参数属性(Parameter properties)
在介绍参数属性之前,首先让我们先来看一个例子: 1
2
3
4
5
6
7
8
9
10
11
12
13class Car {
public name: string;
public type: string;
constructor(name: string, type?: string) {
this.name = name;
this.type = type;
}
protected greet() {
console.log('Hi, I am a car!');
}
}
这是一个典型的类声明。在这个类中,我们声明了两个属性 name 和 type 然后在构造器中为这两个属性赋初值,这个流程和 Java 特别像。现在,利用参数属性我们可以把这个类声明写得更加简单,代码如下: 1
2
3
4
5
6
7
8
9class Car {
constructor(public name: string, public type?: string) {
}
protected greet() {
console.log('Hi, I am a car!');
}
}
即通过直接为构造器参数加访问修饰符,来实现属性成员的定义和初始化。因此,我们可以把参数属性理解为类成员属性定义和初始化的简便写法。也仅仅只是写法简便了一点,本质概念还是一样的,所以也不要想得太多。