对象创建模式

Object构造函数模式

  • 套路:先创建空Object对象,再动态添加属性/方法

  • 适用场景:起始时不确定对象内部数据

  • 弊端:语句太多

    image-20210528192748944

对象字面量

  • 套路:使用{}创建对象,同时指定属性/方法

  • 适用场景:起始时对象内部的数据是确定的

  • 弊端:如果创建多个对象,有重复代码

    image-20210528193919701

工厂模式

  • 套路:通过工厂函数动态创建对象并返回

  • 适用场景:需要创建多个对象

  • 弊端:对象没有具体的类型,都是Object类型

    image-20210528194604253

自定义构造函数模式

  • 套路:自定义构造函数,通过new创建对象

  • 适用场景:需要创建多个类型确定的对象

  • 弊端:每个对象都有相同的数据,浪费内存

    image-20210528195128197

构造函数+原型的组合模式

  • 套路:自定义构造函数,属性在函数中初始化,方法添加到原型上

  • 适用场景:需要创建多个类型确定的对象

    image-20210528195650383

继承模式

原型链的继承

  • 套路:

    1. 定义父类型构造函数
    2. 给父类型的原型添加方法
    3. 定义子类型的构造函数
    4. 创建父类型的对象赋值给子类型的原型
    5. 将子类型原型的构造属性设置为子类型
    6. 给子类型原型添加方法
    7. 创建子类型的对象:可以调用父类型的方法
  • 关键:

    • 子类型的原型为父类型的一个实例对象
    image-20210528200829944
  • 思维图:

    image-20210528201809842

借用构造函数继承(假的)

  • 套路:

    1. 定义父类型构造函数
    2. 定义子类型构造函数
    3. 在子类型构造函数中调用父类型构造方法
  • 关键:

    • 在子类型构造函数中通用call()调用父类型构造函数

      A.call(B) 用B来调用执行A

    image-20210528203130474

组合继承(原型链+借用构造函数)

  • 利用原型链实现对父类型对象的方法继承

  • 利用super()借用父类型构造函数初始化相同属性

    image-20210528203729596

附:进程与线程

  • 进程:程序的一次执行,它占用一片独有的内存空间

  • 线程:

    • 是进程内的一个独立执行单元
    • 是程序执行的完整流程
    • 是CPU的最小调度单元
  • 图解

    image-20210528205201545

  • 相关知识:

    image-20210528205351075

  • js是单线程运行的,但使用H5中的Web Workers可以多线程运行

  • 浏览器是多线程运行的