首先我們需要了解什么是類,class。
什么是面向對象編程?
即Object Oriented Programming,OOP。主要思想是把構成問題的各個事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘一個事物在整個解決問題的步驟中的行為。面向對象程序設計中的概念主要包括:對象、類、數據抽象、繼承、動態綁定、數據封裝、多態性、消息傳遞。
面向過程是具體化的,流程化的,解決一個問題,你需要一步一步的分析,一步一步的實現。
面向對象是模型化的,你只需抽象出一個類,這是一個封閉的盒子,在這里你擁有數據也擁有解決問題的方法。需要什么功能直接使用就可以了,不必去一步一步的實現,至於這個功能是如何實現的,管我們什么事?我們會用就可以了。
面向對象的底層其實還是面向過程,把面向過程抽象成類,然后封裝,方便我們我們使用的就是面向對象了。
類Class
以下是一個常見的類的寫法。
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
我們聲明一個Greeter類。這個類有3個成員:一個叫做greeting的屬性,一個構造函數和一個greet方法。
公共public,私有private與受保護protected的修飾符
一般來說,在TypeScript里,成員都默認為public。
我們可以把上面的例子寫成這樣:
class Greeter {
public greeting: string;
public constructor(message: string) {
this.greeting = message;
}
public greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
當成員被標記成private時,它就不能在聲明它的類的外部訪問。
class Greeter {
private greeting: string;
constructor(message: string) {
this.greeting = message;
}
}
new Greeter('abc').greeting; // 錯誤:'greeting'是私有的。
protected修飾符與private修飾符的行為很相似,但有一點不同,protected成員在派生類中仍然可以訪問。 例如:
class Person {
protected name: string;
constructor(name: string) { this.name = name; }
}
class Employee extends Person {
private department: string;
constructor(name: string, department: string) {
super(name)
this.department = department;
}
public getElevatorPitch() {
return `Hello, my name is ${this.name} and I work in ${this.department}.`;
}
}
let howard = new Employee("Howard", "Sales");
console.log(howard.getElevatorPitch());
console.log(howard.name); // 錯誤