构造函数

obj. proto = 构造函数.prototype

new操作符

  • new X() 自动做了下面四件事情

    • 创建一个空对象
    • 为空对象关联原型,原型地址为X.prototype
    • 将空对象最为this关键字运行构造函数
    • return this

      类型与类

  • 类型是JS数据的分类

  • 类是对于对象的分类,常见的有Array,Function,Data,Global,RegExp,Math

    window的构造者

  • Window

    1. window.constructor //Window
    2. window.__proto__ == Window.prototype //true

    window.Object的构造者

  • window.Function

    1. window.Object.constructor //Function
    2. window.Object.constructor == window.Function //true

    window.Function的构造者

  • 自己本身,人为规定的

    1. window.Function.constructor == window.Function //true

    proto 与prototype的区别

  1. 所有函数一出生就有一个 prototype 属性,所有 prototype 一出生就有一个 constructor 属性,所有 constructor 属性一出生就保存了对应的函数的地址(一个函数不是构造函数,它依然拥有 prototype 属性,只不过这个属性暂时没什么用)

  2. 如果一个对象不是函数,那么这个对象一般没有 prototype 属性,但这个对象一般一定会有 proto 属性

  3. Object.prototype(根对象) 是 Object 构造出来的对象 obj 的原型,即 obj.proto === Object.prototype.
    但是 Object.prototype 不是 Object 的原型,Object.proto 才是 Object 的原型。 ```javascript obj.proto === Object.prototype //true

Object.proto === Object.prototype //false

  1. 4. 所有函数的原型都是 Function.prototype,所以 Object.__proto__ === Function.prototype Function.prototype 的原型是Object.prototype(根对象)。
  2. ```javascript
  3. Object.__proto__ === Function.prototype //true
  4. Array.__proto__ === Function.prototype //true
  5. Function.__proto__ === Function.prototype //true
  6. Function.prototype.__proto__ === Object.prototype //true
  7. Array.prototype.__proto__ === Object.prototype //true
  1. Object.prototype 的原型是 null。
    1. Object.prototype.__proto__ === null //true