TypeScript 可以使用三种访问修饰符(Access Modifiers),分别是 public、private 和 protected。

  • public 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的
  • private 修饰的属性或方法是私有的,不能在声明它的类的外部访问
  • protected 修饰的属性或方法是受保护的,它和 private 类似,区别是它在子类中也是允许被访问的

下面举一些例子:

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

上面的例子中,name 被设置为了 public,所以直接访问实例的 name 属性是允许的。

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

class Animal {
private name;
public constructor(name) {
this.name = name;
}
} let a = new Animal('Jack');
console.log(a.name); // Jack
a.name = 'Tom'; // index.ts(9,13): error TS2341: Property 'name' is private and only accessible within class 'Animal'.
// index.ts(10,1): error TS2341: Property 'name' is private and only accessible within class 'Animal'.

需要注意的是,TypeScript 编译之后的代码中,并没有限制 private 属性在外部的可访问性。

上面的例子编译后的代码是:

var Animal = (function () {
function Animal(name) {
this.name = name;
}
return Animal;
}());
var a = new Animal('Jack');
console.log(a.name);
a.name = 'Tom';

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

class Animal {
private name;
public constructor(name) {
this.name = name;
}
} class Cat extends Animal {
constructor(name) {
super(name);
console.log(this.name);
}
} // index.ts(11,17): error TS2341: Property 'name' is private and only accessible within class 'Animal'.
 

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

class Animal {
protected name;
public constructor(name) {
this.name = name;
}
} class Cat extends Animal {
constructor(name) {
super(name);
console.log(this.name);
}
}
 

最新文章

  1. Linux Socket 网络编程
  2. js获取文档高度
  3. java第四次作业
  4. Javascript的实例化与继承:请停止使用new关键字
  5. Linux IPC POSIX 消息队列
  6. div被object覆盖的解决办法
  7. 一次性编译所有T-Code
  8. 代码文档生成工具-Doxygen生成CHM和RTF图文教程
  9. Linux Command Line 解析
  10. bootstrap-treeview
  11. 解决kibana 4 关于响应时间的问题
  12. 【T-SQL性能优化】01.TempDB的使用和性能问题
  13. React Native入门 认识Flexbox布局
  14. KnockOut 绑定之foreach绑定
  15. gnuradio 创建cos_source
  16. BZOJ5249 九省联考2018IIIDX(线段树+贪心)
  17. systemctl介绍
  18. FZU软工第三次作业-原型设计
  19. nSamplesPerSec和nAvgBytesPerSec
  20. Head First Servlets & JSP 学习笔记 第二章 —— Web应用体系结构

热门文章

  1. Codeforces940掉分记
  2. python类型-字典
  3. 玩转Django2.0---Django笔记建站基础九(二)(Auth认证系统)
  4. 在qemu-kvm配置桥接网络
  5. 从零开始ming的多人联机游戏--游戏客户端(1)六边形地图
  6. python实例:从excel读取股票代码,爬取股票信息写到代码后面的单元格中
  7. git上传本地代码到远程失败
  8. 仅主机、NAT、桥接模式
  9. 一、Shell概述
  10. 创建一个圆类Circle的对象,分别设置圆的半径计算并分别显示圆半径、圆面积、圆周长。