class Person {
// 定义实例属性
name:string = '景天';
// 在属性前使用static关键字可以定义类属性
static age:number = 18;
// 定义实例方法
sayHello() {
console.log('Hello')
}
// 定义类方法
static sayHi() {
console.log('Hi')
}
}
// 实例属性和方法的使用
class p = new Person()
console.log(p.name)
p.sayHello()
// 类属性和方法的使用
console.log(Person.age)
Person.sayHi()
class中的构造函数(constructor)
常规写法
class Person {
name: string
age: number
// constructor 被称为构造函数
// 构造函数会在实例对象创建的时候调用
constructor(name:string,age:number) {
// 在实例方法中,this就是表示当前的实例
// 在构造函数中,当前对象就是当前新建的那个对象
// 可以通过this向新建的对象中添加属性
this.name = name
this.age = age
}
sayHi() {
// 在实例方法中,可以通过this来表示当前调用方法的对象
console.log(this)
console.log(`你好,我是${this.name}`)
}
}
class p = new Person('景天',18)
console.log(p.name,p.age)
简写方式
class Person {
// 可以把属性的定义写到构造函数的参数中去,所示一种语法糖的写法
constructor(public name:string, public age:number) {
}
sayHi() {
console.log(`你好,我是${this.name}`)
}
}
class p = new Person('景天',18)
console.log(p.name,p.age)
class中的继承
使用继承后,子类将会拥有父类所有的方法和属性。
如果子类中和父类中有相同的属性和方法,子类中会覆盖父类的方法。
使用:子类 extends 父类
demo
// 创建一个父类
class Animal {
name: string
constructor(name:string) {
this.name = name
}
sayHi() {
console.log('动物们说Hi')
}
}
// 狗这个子类继承父类
class Dog extends Animal {
age: number
constructor(name:string,age:number) {
// 如果在子类中写了构造函数,在子类的构造函数中必须要调用下父类的构造函数
// super就是代表父类中的构造函数
super(name);
this.age = age
}
// 添加一个自己的方法
run() {
console.log('我在跑呢')
}
}
// 猫这个子类继承父类
class Cat extends Animal {
// 子类中也有sayHi方法,会覆盖父类中的方法,使用自己的方法
sayHi() {
console.log('喵喵喵喵')
}
}
let dog = new Dog('哮天犬',1000)
dog.sayHi()
dog.run()
let cat = new Cat('九命猫妖')
cat.sayHi()