【JS】JS总结

173 阅读2分钟

一、最重要的3条知识:

1.JS公式

  • 对象.__proto__===其构造函数.prototype(JS唯一公式,如果不会就套公式) 2.根公理
  • Object.prototype是所有对象的(直接或间接)原型(所谓公理就是规定好的) 3.函数公理
  • 所有函数都是由Funcition构造的
  • 任何函数.__proto__===Funcition.prototyp
  • 任意函数有Object/Array/Funciton

二、JS世界

JS 世界的构造顺序

1. 创建根对象 #101

  • 里面有些属性,比如toString,valueOf
  • 根对象没有名字
  • 原型规定为null,即__proto__ : null

2. 根对象没有名字创建函数的原型 #208

  • 里面有些属性,比如callapply
  • 我是由根对象创造出来的,所以我的原型为根对象#101,即__proto__ : #101

3. 创建数组的原型 #404

  • 里面有些属性,比如pushpop
  • 我是由根对象创造出来的,所以我的原型为根对象#101,即__proto__ : #101

4. 创建 Function #342,原型 __p 为 #208

  • Function.prototype 存储函数的原型,等于 #208
  • 此时发现 Function__proto__prototype 都是 #208

5. 用 Function 创建 Object

  • Object.prototype 存储对象的原型,等于 #101

6. 用 Function 创建 Array

  • Array.prototype 存储数组的原型,等于 #404

7. 创建 window 对象

  • window'Object' 'Array' 属性将 5 和 6 中的函数命名
  • 记住一点,JS 创建一个对象时,不会给这个对象名字的

JS 世界的构造顺序(续1)

  • new Object() 创建 obj1
  • new 会将 obj1 的原型 __p 设置为 Object.prototype,也就是 #101
  • new Array() 创建 arr1
  • new 会将 arr1 的原型 __p 设置为 Array.prototype,也就是 #404
  • new Function 创建 f1
  • new 会将 f1 的原型 __p 设置为 Function.prototype,也就是 #208

JS 世界的构造顺序(续2)

  • 自己定义构造函数 Person,函数里给 this 加属性
  • Person 自动创建 prototype 属性和对应的对象 #502
  • Person.prototype #502 上面加属性
  • new Person() 创建对象 p
  • new 会将 p 的原型 __p 设为 #502

图示