class 定义类,使用 constructor 定义构造函数。
通过 new 生成新实例的时候,会自动调用构造函数。
typescript复制代码
class Animal {
constructor(name) {
this.name = name;
}
sayHi() {
return `My name is ${this.name}`;
}
}
let a = new Animal('Jack');
console.log(a.sayHi()); // My name is Jack
继承
typescript复制代码
使用 extends 关键字实现继承,子类中使用 super 关键字来调用父类的构造函数和方法。
typescript复制代码
class Animal {
public name: string
constructor(name) {
this.name = name;
}
sayHi() {
return `My name is ${this.name}`;
}
}
class Cat extends Animal {
constructor(name: string) {
super(name); // 调用父类的 constructor(name)
}
sayHi() {
return 'Meow, ' + super.sayHi(); // 调用父类的 sayHi()
}
}
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
class Animal {
protected name: string
protected constructor(name: string) {
this.name= name
}
protected getName() {
return this.name
}
}
//protected 修饰constructor不能创建实例 报错提示:类"Animal"的构造函数是受保护的,仅可在类声明中访问。
// const cat = new Animal (18)
class Dog extends Animal {
constructor(name: string) {
console.log(super.getName()) // 可以访问父类中的protected方法
}
}
const dog= new Dog('Laura')
其他特性
readonly -- 只读属性
typescript复制代码
可以使用readonly关键字将属性设置为只读的。
typescript复制代码
class Animal {
readonly name;
public constructor(name) {
this.name = name;
}
}
let a = new Animal('Jack');
console.log(a.name); // Jack
a.name = 'Tom'; // 错误 name是只读的
abstract class Animal {
public name;
public constructor(name) {
this.name = name;
}
public abstract sayHi();
}
class Cat extends Animal {
public sayHi() { // 实现抽象类的抽象方法
console.log(`Meow, My name is ${this.name}`);
}
}
let cat = new Cat('Tom');