这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战
-
继承
- 在TypeScript里,我们可以使用常用的面向对象模式。 基于类的程序设计中一种最基本的模式是允许使用继承来扩展现有的类
class Animal {
eat(str:string):string{
return `我在吃${str}~`
}
}
class Pig extends Animal{
name:string
constructor(name:string){
super()
this.name = name
}
}
let student = new Pig('猪小屁');
console.log(student.eat('猪肉铺'))
- 这个例子展示了最基本的继承:类从基类中继承了属性和方法。 这里,
Pig
是一个 派生类,它派生自Animal
基类,通过extends
关键字。 派生类通常被称作 子类,基类通常被称作 超类。 因为Pig
继承了Animal
的功能,因此我们可以创建一个Pig
的实例,它能够bark()
。
-
Ts有静态成员(static)修饰符;Js中也有同样的修饰符,该成员最终被解析到类的自身属性上(解析成ES5的话就是函数的属性),静态属性可以被类名直接在任何地方引用。
-
Ts有只读成员(readonly)修饰符;Js中没有该修饰符,但是可以通过属性访问器get来实现。
class Info{
readonly name:string
constructor(name:string){
this.name = name
}
}
let student = new Info('猪小屁');
student.name = '猪小美' // 报错
从这个例子上看,我们定义的属性name
为只读属性,我们在去给其赋值就会报错,只读属性必须在声明时或构造函数里被初始化。
- 创建类的静态成员,这些属性存在于类本身上面而不是类的实例上
- 在ES6部分对静态属性的定义:这些属性存在于类本身上面而不是类的实例上,只能通过类.属性名称的方式来进行调用,而不能在实例上进行调用。
class Animal{
static eat(str:string):void{
console.log(this);
}
}
let pig = new Animal()
pig.eat("冰淇淋"); // 报错
Animal.eat('冰淇淋')
如果代码中标注写了pig.eat
的话是会直接报错的,因为构造函数的this默认指的是构造函数生成的实例,而实例是不会继承类的静态方法的。