原型和原型链
1.显式原型
prototype是一个指针,指向一个空的对象(constructor属性除外),这个对象是原型对象,被称为显式原型- 每一个
function都有一个prototype属性,箭头函数除外 - 当函数被实例化的时候,如果实例化对象调用某个方法或者属性,实例化对象自己没有,就会找到这个构造函数的原型对象上去找
- 只有构造函数的
prototype才有意义,其他的函数prototype没有用
2.隐式原型
- 每一个Object都有一个隐式原型
__proto__ - 对象的隐式原型指向其构造函数的显示原型
- 当对象获取某个属性,自己没有的时候,就会沿着隐式原型
__proto__找到其构造函数的显式原型prototype - 当给对象设置一个属性或方法的时候,不会通过隐式原型,而是直接给对象设置上去
3.constructor
- 使用
constructor可以知道对象是被谁实例化出来的(获取对象的构造函数) constructor存在在构造函数的原型对象上- 任意的对象都是被实例化出来的,所以都能找到构造函数的原型对象,所以每个对象都能调用
constructor属性 - 构造函数的
prototype指向其原型对象,原型对象的constructor指向其构造函数。
4.原型链
作用:对象查找属性的规则,原型链的终点是null
步骤:
(1)先在自身属性上找
(2)找不到就沿着隐式原型属性一层层找
(3)这个过程找到了就结束
(4)直到找到`Object.prototype.__proto__`上,如果还没有找到,则返回值是undefined
5.作用
- 能够实现继承(得到别人的属性和方法),就可以用复用
- 使用:构造函数 或 组合继承 或 ES6 class 语法
- 具体:React 类组件