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); } }