原型链是干什么用的
JavaScript 采用了原型和原型链来实现类和继承(就是查找属性用的)。
当 JavaScript 查找一个对象上的属性的时候,在该对象上找不到就会去它的原型链上查找。比如:
1 | function Foo() {} |
原型和原型链主要由三个指针实现:
prototype
: 构造函数的prototype
属性指向原型对象__proto__
: 实例对象的__proto__
属性指向原型对象constructor
: 原型对象的constructor
属性指向构造函数- 所有对象都基于
Object
,是因为所有原型对象的__proto__
最终都指向Object.prototype
,而Object.prototype
的__proto__
为 null
JavaScript 只要前面带 new 就是构造函数,箭头函数和异步函数不可以做构造函数,因为箭头函数没有 this,而异步函数返回的是 Promise 对象
当我们在实例对象上查找一个属性的时候,如果不存在,则会递归的去原型链上找。
- 所有对象都有
__proto__
属性,但只有函数对象才有prototype
属性 - 实例对象没有
constructor
属性,该属性继承自原型对象。分别对实例对象和原型对象使用hasOwnProperty
验证constructor
属性即可证明
1 | var a = new Object(); |