成员可访问性定义了类的成员允许在何处被访问。TypeScript为类成员提供了以下三种可访问性修饰符:
- public
- protected
- private
这三种可访问性修饰符是TypeScript语言对JavaScript语言的补充。在JavaScript语言中不支持这三种可访问性修饰符。
public
类的公有成员没有访问限制,可以在当前类的内部、外部以及派生类的内部访问。类的公有成员使用public
修饰符标识。示例如下:
class Base {
public a: string = '';
}
class Derived extends Base {
public b() {
return this.a; // 允许访问
}
}
const derived = new Derived();
derived.a; // 允许访问
derived.b(); // 允许访问
在默认情况下,类的所有成员都是公有成员。因此,在定义公有成员时也可以省略public修饰符。例如,下例中的成员变量a
和成员函数b
都是公有成员:
class Base {
a: string = '';
}
class Derived extends Base {
b() {
return this.a;
}
}
protected
类的受保护成员允许在当前类的内部和派生类的内部访问,但是不允许在当前类的外部访问。类的受保护成员使用protected
修饰符标识。
下例中Base类的成员变量x是受保护成员,它允许在Base类的内部被访问,它也允许在Base类的派生类Derived内部被访问。但是,它不允许在类的外部被访问。示例如下:
class Base {
protected x: string = '';
a() {
this.x; // 允许访问
}
}
class Derived extends Base {
b() {
this.x; // 允许访问
}
}
const base = new Base();
base.x; // 不允许访问
private
类的私有成员只允许在当前类的内部被访问,在当前类的外部以及派生类的内部都不允许访问。类的私有成员使用private
修饰符标识。
下例中Base类的成员变量x
是私有成员,它允许在Base类的内部被访问。但是,它既不允许在Base类的派生类Derived内部被访问,也不允许在Base类的外部被访问。示例如下:
class Base {
private x: string = '';
a() {
this.x; // 允许访问
}
}
class Derived extends Base {
b() {
this.x; // 不允许访问
}
}
const base = new Base();
base.x; // 不允许访问
const derived = new Derived();
derived.x; // 不允许访问
私有字段
2020年1月,ECMAScript标准引入了一个新特性,那就是允许在类中定义私有字段。这意味着JavaScript语言将原生地支持类的私有成员。TypeScript语言也从3.8版本开始支持该特性。
在ECMAScript标准中,类的私有字段使用一种新的语法来定义,即在字段标识符前添加一个“#”
符号。不论是在定义私有字段时还是在访问私有字段时,都需要在私有字段名前添加一个“#”
符号。示例如下:
class Circle {
#radius: number;
constructor() {
this.#radius = 1;
}
}
const circle = new Circle();
circle.#radius; // 不允许访问
此例中,“#radius”
定义了一个私有字段radius。不论是在定义私有字段时还是在访问私有字段时,都必须在字段标识符前添加一个“#”
符号。
酷客网相关文章:
评论前必须登录!
注册