Es6提供了更接近传统语言类的写法,引入了Class类这个概念。Es6的Class可以看作是一个语法糖,他的功能Es5大多都可以做到。写法更加清晰更像面向对象编程的语法。
在Ts中定义类
// 在Ts中定义类
class Person {
name: string
age: number
gender: string
constructor(name: string, age: number, gender: string) {
this.name = name
this.age = age
this.gender = gender
}
}
const person = new Person('Yang', 18, '男')
类的修饰符
1.Public 公共的 内部外部都可以访问 不写默认就是public
// 在Ts中定义类
class Person {
// public公共的 内部外部都可以访问 不写默认就是public
public name: string
age: number
gender: string
constructor(name: string, age: number, gender: string) {
this.name = name
this.age = age
this.gender = gender
}
}
const person = new Person('Yang', 18, '男')
console.log(person.name) // 可以正常访问
2.Private 私有的 只有内部的方法可以访问 外部无法访问
// 在Ts中定义类
class Person {
public name: string
// private 私有的 只有内部的方法可以访问 外部无法访问
private age: number
gender: string
constructor(name: string, age: number, gender: string) {
this.name = name
this.age = age
this.gender = gender
}
changeAge() {
this.age++
console.log(this.age)
}
}
const person = new Person('Yang', 18, '男')
// console.log(person.age) // 属性age是私有的 只能在Person类中访问
person.changeAge() // 19
3.protected 受保护的只有内部和子类中可以访问
// 在Ts中定义类
class Person {
public name: string
private age: number
// protected 受保护的 只能在内部和子类中访问
protected gender: string
constructor(name: string, age: number, gender: string) {
this.name = name
this.age = age
this.gender = gender
}
}
const p1 = new Person('Yang', 18, '男')
// console.log(person.gender) // 属性“gender”受保护,只能在类“Person”及其子类中访问。
class Man extends Person {
constructor(name: string, age: number, gender: string) {
super('Yang', 18, '男')
}
// 子类中访问并改变
changeGender() {
this.gender = '女'
console.log(this.gender)
}
}
const p2 = new Man('Yang', 18, '男')
p2.changeGender()
4.static
// 在Ts中定义类
class Person {
public name: string
public age: number
protected gender: string
// 类的静态属性 相当于构造函数给函数对象赋值一个属性
static game: string = '重装机兵'
constructor(name: string, age: number, gender: string) {
this.name = name
this.age = age
this.gender = gender
}
// 静态方法只能访问静态属性 因为this是Person
static play() {
console.log(this == Person) // true
console.log(this.game) // 可以
}
}
// 访问类的静态属性
console.log(Person.game)
Person.play()
通过interface约束类
interface Person {
play(str: string): string
}
// 类P实现Person接口 此时P必须实现play方法
class P implements Person {
play(str: string): string {
return str
}
}
const person = new P()
interface Person {
play(str: string): string
set(): void
}
interface P2 {
hhh(): void
}
// A实现了set方法
class A {
set() {}
hhh() {}
}
// 类P实现Person接口 此时P必须实现play方法
// 通过继承来的方法也可以实现接口
// 可以实现多个接口
class P extends A implements Person, P2 {
play(str: string): string {
return str
}
}
const person = new P()