//class类
class sayWords {
//创建两个变量(变量的值必须初始化,若没有初始化,需要在构造函数中为其赋值)
userName: string;
userSay: string;
//给变量赋值
constructor(userName: string, userSay: string) {
this.userName = userName;
this.userSay = userSay;
}
userActive() {
console.log(`${this.userName}开始说话啦,他说${this.userSay}`)
}
}
//创建对象并引用(实例化对象)
const s1 = new sayWords('tom', 'hello')
//类成员的属性,都是实例属性,即实例化对象之后,当前实例对象中包含所有的类属性, 类成员方法,都是实例方法
console.log(s1.userName)
console.log(s1.userSay)
s1.userActive()
和js对象相比,js对象需要通过prototype的方式将对象方法绑定到他的原型上,ts类中函数直接写在class当中。(写法上的区别)
类的继承extends
//类的继承
class Dog{
name:string;
static sex:string;
constructor(name:string){
this.name = name
}
run(){
console.log(this.name)
}
}
class Husky extends Dog{
// 父类的构造函数所包含的参数,子类也必须包含,且子类必须含有super
constructor(name:string,age:number){
super(name)
//给属性赋值必须在super之后
this.age = 2
}
age:number
}
类成员修饰符
public 公共属性(默认修饰符)
private 私有属性 只能在类的本身被调用而不能在类的实例或者类的子类中调用
protect 保护属性 只能在类和其子类中被调用,不能在类的实例(new Dog())中被调用
readonly 只读属性 必须给该属性初始化并且不能更改
static 静态属性 static 静态属性 可以通过类来调用 Dog.sex,也可以通过子类去调用Husky.sex
//类的构造函数的属性,也可以给他添加修饰符
class Animal{
//相当于在当前类中声明了一个公共的name,name就变成了实例属性
// name:string;
constructor(public name:string){
}
}
抽象类 abstract(只能被继承,而不能被实例化)
可以用来封装多个公用的函数,提高代码的复用性
abstract class AbCla{
eat(){
console.log('eat')
}
}
class AbChild extends AbCla{
name:string;
constructor(name:string){
super()
this.name = name
}
}
let ab = new AbChild('hah')
ab.eat()