JavaScript原型

136 阅读1分钟

原型和原型链

  • 所有对象都是通过new 函数创建 例:const obj = {} --> const obj = new Object()
  • 所有的函数也是对象
    • 函数中可以有属性
  • 所有对象都是引用类型

原型 prototype

  • 所有函数都有一个属性:pototype,称之为函数原型
  • 默认情况下,prototype是一个普通的object对象
  • 默认情况下,prototype中有一个属性,constructor,它也是一个对象,指向构造函数本身

隐式原型 __proto__

  • 所有对象都有一个属性:__proto__,称之为隐式原型
  • 默认情况下,隐式原型指向创建该对象的函数原型 Obejct.__proto___-->Function.prototype

两者关系

  • Function.prototype --> Function原型
  • Object.prototype --> Object原型
  • 自定义函数.prototype --> 自定义函数原型

  • Function.__proto__ --> Function原型
  • Object.__proto__ --> Function原型
  • 自定义对象.__proto__ --> 自定义函数原型

  • new Function 产生 Object
  • new Function 产生 自定义函数
  • new 自定义函数 产生 自定义对象

  • 自定义函数原型.__proto__ --> Object原型
  • Function原型.__proto__ --> Object原型

  • Object原型.__proto__ --> null
function a() {}
(new a()).__proto__.__proto__ === Object.prototype // true
a.prototype.__proto__ === Object.prototype // true
(new a()).__proto__ === a.prototype // true
Function.prototype === Object.__proto__ // true