TS学习笔记(四)

一、类

实例属性 :class内部定义的属性,只能通过实例访问

静态属性: 属性前加关键字static 可以通过类访问到。区别于其他的属性或者方法都是在原型上

只读属性:关键字readonly 不可修改只可以获取

抽象类:关键字 abstract 禁止创建实例,即不能 new XXX(),抽象类可以添加抽象方法,并且继承的子类必须要重写抽象方法

二、constructor

构造函数内的this指向实例

子类继承父类,想调用constructor必须使用super()

注意:super用来表示原型对象时,只能用在对象的方法中,用在其他地方都会报错。super的常用场景,比如当子类重写了父类的某个同名方法或者属性后,如果这时还想在子类中调用这个父类的这个同名方法或属性,就可以直接使用super关键字指向父类,调用这个父类原有的方法或者属性

注意:当使用super指向原型对象中的一个方法时,方法中的this不指向原型对象,而是指向当前所存在的子类对象。

注意:子类在继承父类时,子类中是找不到this的,没有自己的this对象,只能使用super继承父类中的this对象,然后在加工。

即在ES6的继承,需要先创建父类的this,子类调用super继承父类的this对象,然后再用子类的构造函数对this进行加工。

这里另外说一下与es5继承方式的区别:

es5的继承,实质是先创造子类的实例对象 this ,然后再将父类的方法添加到 this 上面( Parent.apply(this) )


三、接口

接口定义一个类结构,包含属性和方法,也可以当成类型声明

同一个接口可以多次定义来新添加属性

interface Myinter {
    name:string,
    age:number
}
interface Myinter{
    gender:string
}
const per :Myinter = {
    name:'swk',
    age:10,
    gender:'male'
}

注意:接口内属性和方法不能定义,类似于抽象类抽象方法,但是抽象类内部可以有抽象方法,也可以是非抽象方法。

接口继承:接口理解成一种规范

interface Myinter {
    name:string,
    age:number
    sayhello():void
}
class newL implements Myinter{
    name:string;
    age:number;
    constructor(name){
        this.name = name
    }
    sayhello(){
        console.log('hello');
    }
}

四、属性修饰符

默认public:可以在任意位置访问

private:私有属性,只能在类内部进行修改

 在TS类内部函数前设置关键字 set get 可以获取或者修改私有变量。

protected 受保护的变量,只能在父类和继承的子类中访问。

五、泛型

不确定的类型

function identity<T>(arg: T): T {
    return arg;
}
interface Inter{
    length:number
}
function fn<T extends Inter>(a:T) :number{
     return a.length   
}    

 

posted @ 2021-04-14 12:49  恣肆zisi  阅读(168)  评论(0)    收藏  举报