首先是在es6中的class,类的实例为对象,对象三大特性:封装、继承与多态。
class Animal{
constructor(name){
this.name = name
}
run(){
return `${this.name} is running`
}
}
const snake = new Animal('lily')
console.log(snake.run())es6中的继承:
class Dog extends Animal{
bark(){
return `${this.name} is barking`
}
}
const xiaobao = new Dog('xiaobao')
console.log(xiaobao.run())es6中的多态:
class Cat extends Animal{
static categories = ['manmal']
constructor(name){ //子类构造函数中必须用super()
super(name)
consoe.log(this.name)
}
run(){
return 'memow'+super.run() //调用父类的run函数
}
}
const maomao = new Cat('maomao')ts中的class又增加了三种修饰符,用来给类中的属性与方法设置权限,更易管理。
1、public:修饰的属性与方法是共有的,默认;
2、private:修饰的属性和方法是私有的,只能在class里使用,通过该类new出来的实例、继承的子类也不能使用;
3、protected:修饰的属性与方法是受保护的,继承的子类可以使用。
class Animal{
name: string
constructor(name){
this.name = name
}
private run(){
return `${this.name} is running`
}
}
const snake = new Animal('lily')
console.log(snake.run()) //报错,run已变成私有方法,不能被使用
class Dog extends Animal{
bark(){
return `${this.name} is barking`
}
}
const xiaobao = new Dog('xiaobao')
console.log(xiaobao.run()) //报错,run子类不能使用,若为protected,则可以使用若希望有属性只能读不能写,则可以在该属性前加readonly。
版权声明:本文为weixin_49343253原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。