首先我们需要了解什么是类,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); // 错误