TypeScript类成员可访问性

成员可访问性定义了类的成员允许在何处被访问。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。不论是在定义私有字段时还是在访问私有字段时,都必须在字段标识符前添加一个“#”符号。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!