原型和原型链
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
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END