TypeScript 能够使用三种访问修饰符(Access Modifiers),分别是 public、private 和 protected。this
下面举一些例子:spa
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 属性是容许的。code
不少时候,咱们但愿有的属性是没法直接存取的,这时候就能够用 private 了:blog
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 属性在外部的可访问性。ip
上面的例子编译后的代码是:it
var Animal = (function () { function Animal(name) { this.name = name; } return Animal; }()); var a = new Animal('Jack'); console.log(a.name); a.name = 'Tom';
使用 private 修饰的属性或方法,在子类中也是不容许访问的:io
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 修饰,则容许在子类中访问:console
class Animal { protected name; public constructor(name) { this.name = name; } } class Cat extends Animal { constructor(name) { super(name); console.log(this.name); } }