原型和原型链
- 所有对象都是通过
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
a.prototype.__proto__ === Object.prototype
(new a()).__proto__ === a.prototype
Function.prototype === Object.__proto__