访问修饰符和参数属性

访问修饰符和参数属性

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
13
class 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
9
class Car {
constructor(public name: string, public type?: string) {

}

protected greet() {
console.log('Hi, I am a car!');
}
}

即通过直接为构造器参数加访问修饰符,来实现属性成员的定义和初始化。因此,我们可以把参数属性理解为类成员属性定义和初始化的简便写法。也仅仅只是写法简便了一点,本质概念还是一样的,所以也不要想得太多。

参考链接

  1. TypeScript 2.0: Read-Only Properties
  2. Classes - Typescript Documentation
  3. TypeScript学习笔记之 类