js中面向对象 class类继承 以及TS访问修饰符

181 阅读3分钟

js面向对象

面向对象就是把十事务分解成一个个对象,然后由对象之间分工合作

面向对象的优点:灵活 容易维护 适合多人合作开发大项目

面向对象的特性

封装性:把重复的代码块封装起来
继承性:例如有对象A和对象B,对象B可以继承对象A的属性和方法
多态性:同一个对象在不同时刻体现出不同的状态

js中class类的继承

在ES6 中新增了 extends关键字,用于实现类的继承。

MDN中对 extends关键字的解释是这么说的:

定义:****extends关键字用于类声明或者类表达式中,以创建一个类,该类是另一个类的子类。

语法: class ChildClass extends ParentClass { ... } 描述: extends关键字用来创建一个普通类或者内建对象的子类。

2、类和模块的内部默认使用严格模式,所以不需要使用 use strict 指定运行模式。只要将代码写在类或模块之中,那么就只有严格模式可用。

3、constructor 方法是类的默认方法,通过 new 命令生成对象实例时自动调用该方法。一个类必须有 constructor 方法,如果没有显示定义,一个空的 constructor 方法会被默认添加。

4、类必须使用 new 来调用,否则就会报错。

5、实例的属性除非显示定义在其本身(即 this 对象)上,否则都是定义在原型(即 Class )上。

6、类的实例共享一个原型对象。

8、类不存在变量提升

9、ES6不提供私有方法,不支持私有属性。目前有一个提案为class加私有属性。方法是在属性名前,使用#来表示。

10、类的方法内部如果含有 this,它将默认指向类的实例。

11、name 属性返回 class 后面的类名。

12、在类的内部可以使用 get 和 set 关键字对某个属性设置存储函数和取值函数,拦截该属性的存取行为。

13、存值函数和取值函数是设置在属性的Descriptor对象上的。

14、如果某个方法之前加上星号(*),就表示该方法是一个Generator函数。

15、类相当于实例中的原型,所有在类中定义的方法都会被实例继承。如果在一个方法前加上static关键字,就表示该方法不会被实例继承,而是直接通过类调用,称之为“静态方法”。

16、父类的静态方法可以被子类继承。

17、Class 作为构造函数的语法糖,同时有 prototype 属性和 proto 属性,因此同时存在两条继承链。

    ①子类 __proto__ 属性表示构造函数的继承,总是指向父类。

    ②子类 prototype 属性的 __proto__ 属性表示方法的继承,总是指向父类的 prototype属性。

TS访问修饰符

1.static: 用于 修饰 变量 或者方法,表示 静态的

  • 当类 中 的 方法 被 声明 为 static 时,其实例化 对象 不可 调用 该方法,只有 类 本身 ,以及 其子类 可以 调用。

  • 2.public: 修饰 属性 和 方法 公共的,任何地方 都可以访问

  • 不写修饰符 默认 就是 public

3.private: 修饰 属性 和 方法 私有的 , 只能在 本类 内部使用,其余地方 均不可以 访问 实例化对象 和 类 也不可 访问

4.protected: 修饰 属性 和 方法 被 保护的, 被类 内部 以及 其 子类 内部 非 static 方法 内 可 访问,实例化 对象 和 类 也不可访问