引言
- 类的属性定义,分为实例属性和原型属性
- 原型方法、静态方法
this上声明的属性,必须要提前声明
上述写法比较麻烦,我们可以通过修饰符直接将传递的属性绑定到this上
- 如果我们传入的参数想直接绑定到this上,我们可以用public
- 不想直接绑定到this上,我们就不加public修饰符
属性修饰符
- public (公开的)
- perivate (自己访问的,从外面拿不到,子类也访问不到,只能在这个类内部访问到属性)
- protected (自己和自己孩子可以访问,外面不能访问)
- readonly (仅读的属性,你写了readonly之后,默认在属性前面加了public,所以你在外面、类本身、子类都可以访问到,加了readonly之后,只能在初始化进行赋值操作,也就是constructor中修改,别的地方都不可以修改)
- 修饰符只是针对ts编写代码时有效果,后面在编译成js之后就消失了
问题1: 我们通过public定义的属性是实例的属性还是原型的属性?
答案的实例上的属性
问题2:那么我们怎么定义类原型上的属性呢?
答案是用get属性访问器,只有这一种方法能给类的原型上添加属性
定义类原型上的方法
super
- super在构造函数中指代的是父类的构造函数,在类的静态方法中也指代的是父类的构造函数
- super在原型方法中指代的是父类的原型
定义类静态属性和静态方法
- 静态方法就是类本身的方法
- 可以直接类名.方法的方式调用
- 静态属性同理
- 静态属性和方法是可以被继承的,也就是说子类也可以.方法(属性)去访问父类的静态方法和属性
函数重载
- 子类上定义和父类方法中相同的函数,子类的函数会重载父类的相同函数
- 父类的方法上返回值void跟我们之前函数的void不太一样,父类的方法返回值的void表示不关心子类的返回值,否则父类写的返回值什么类型,子类也必须返回什么类型
- 子类父类都有相同函数,会优先调用子类的