JS总结

55 阅读2分钟

一、三大知识

  • JS公式:对象.__proto__===其构造函数.prototype
  • 根公理:Object.prototype是所有对象的(直接或间接)原型
  • 函数公理:所有函数都是由Function构造的,即任何函数(Object、Array、Function).__proto__===Function.prototype

二、以上三点+基础知识,即可推出JS世界

1、理清思路

  • XXX的原型
  1. 【的原型】等价于【.__proto__
  • 矛盾?直接原型和间接原型
  1. [1,2,3]的原型是Array.prototype
  2. 而所有对象的原型是Object.prototype
  3. 所以,对普通对象来说,Object.prototype是直接原型;对数组、函数来说,Object.prototype是间接原型
  • 不认同根公理? 微信图片_20230329135158.jpg

2、JS世界的构造顺序

微信图片_20230329135429.jpg

  1. 创建根对象#101,无名
  2. 创建函数的原型#208,原型.__proto__为#101
  3. 创建数组的原型#404,原型.__proto__为#101
  4. 创建Function#342,原型.__proto__为#208
  5. 让Function.prototype等于#208,有名
  6. Function.__proto__===Function.prototype
  7. 用Function创建Object#909,无名
  8. 让Object.prototype等于#101,有名
  9. 用Function创建Array#1101,无名
  10. 让Array.prototype等于#404,有名
  11. 创建window对象(不属于JS世界)
  12. 用window的'Object''Array'属性将7.和9.中的函数命名
  13. 记住一点,JS创建一个对象时,不会给这个对象名字的 微信图片_20230329142401.png(截图来自饥人谷课件)
  • 这下,再new一个新的
  1. new Object()创建obj1,new会将obj1的原型.__proto__设置为Object.prototype,#101
  2. new Array()创建arr1,new会将arr1的原型.__proto__设置为Array.prototype,#404
  3. new Function创建f1,new会将f1的原型.__proto__设置为Function.prototype,#208
  • 自定义构造函数
  1. 自定义构造函数Person,函数里给this加属性(name、age等)
  2. Person自动创建prototype属性和对应的对象#502
  3. 可以在#502上加共有属性(国籍等)
  4. new Person()创建p,new会将p的原型.__proto__设置为Person.prototype,#502 微信图片_20230329143305.jpg
  • 总结 微信图片_20230329143654.jpg
  • 一些刁钻等式 微信图片_20230329180930.png