面向对象的底层处理机制和重写NEW

77 阅读2分钟
  • 构造函数执行VS普通函数执行:
    • 1,构造函数执行也像普通函数执行一样,产生私有上下文
      • +AO
      • +作用域链
      • +初始化THIS
      • +。。。
      • +释放和不释放
    • 2,区别
      • 1,默认创建一个经实例对象
      • +Fn被称之为类/构造函数
      • +创建的这个对象称之为类的实例对象
      • 2,让上下文中的this指向创建的实例对象
        • +代码执行中,出现的this.xxx =xx, 就是在给 实例对象设置私有属性
        • +let xxx=xxx 和实例对象没关系,只是给上下文 中设置私有变量
    • 3,观察函数的返回值 return\
      • +如果函数返回的是”原始值类型值“(或者没有返回 值),则把创建的实例对象返回
      • +只有自己动手返回对象对象类型值,才以自己返回 的为主

image.png

image.png

prototype和__proto__

大部分“函数数据类型”的值都具备“prototype(原型/显式原型)”属性,属性值本身是一个对象「浏览器会默认为其开辟一个堆内存,用来存储实例可调用的公共的属性和方法」,在浏览器默认开辟的这个堆内存中「原型对象」有一个默认的属性“constructor(构造函数/构造器)”,属性值是当前函数/类本身!!

  • 函数数据类型

    • 普通函数(实名或者匿名函数)
    • 箭头函数
    • 构造函数/类「内置类/自定义类」
    • 生成器函数 Generator
  • 不具备prototype的函数

    • 箭头函数
    • 基于ES6给对象某个成员赋值函数值的快捷操作

每一个“对象数据类型”的值都具备一个属性“proto(原型链/隐式原型)”,属性值指向“自己所属类的原型prototype”

  • 对象数据类型值

    • 普通对象
    • 特殊对象:数组、正则、日期、Math、Error…
    • 函数对象
    • 实例对象
    • 构造函数.prototype

image.png