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 方法 内 可 访问,实例化 对象 和 类 也不可访问