修饰符 public、 private 和 protected和区别
2024-08-28 04:37:36
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);
}
}
最新文章
- Linux Socket 网络编程
- js获取文档高度
- java第四次作业
- Javascript的实例化与继承:请停止使用new关键字
- Linux IPC POSIX 消息队列
- div被object覆盖的解决办法
- 一次性编译所有T-Code
- 代码文档生成工具-Doxygen生成CHM和RTF图文教程
- Linux Command Line 解析
- bootstrap-treeview
- 解决kibana 4 关于响应时间的问题
- 【T-SQL性能优化】01.TempDB的使用和性能问题
- React Native入门 认识Flexbox布局
- KnockOut 绑定之foreach绑定
- gnuradio 创建cos_source
- BZOJ5249 九省联考2018IIIDX(线段树+贪心)
- systemctl介绍
- FZU软工第三次作业-原型设计
- nSamplesPerSec和nAvgBytesPerSec
- Head First Servlets &; JSP 学习笔记 第二章 —— Web应用体系结构