js--原型和原型链
desc
提到js,原型和原型链是规避不过的,这之中存在几个容易混淆的概念,理解这些概念后,原型和原型链也就理解了
pic
- 先来一张关系图
- 图片来源
名词解释
构造函数
- 简单来说,构造函数一个函数而已,不同的是它可以用来创建对象(使用new操作符调用)
function Person(){} 这段代码中Person就是构造函数
实例
- 使用构造函数创建出来的对象
let p=new Person() 这段代码中的p就是构造函数的一个实例
原型对象
- 本质也是一个对象,它的
constructor属性指向实例的构造函数
这里Person.prototype就是原型对象,Person.prototype.constructor属性指向构造函数Person
实例p可以通过__proto__属性访问其原型对象
查找机制
上述原型对象Person.prototype也是有自己的原型对象的,就是Object.prototype
- 换句话说,
Person.prototype是Object.prototype的一个实例
- 自身没有的属性,会去原型上查找,这个查找过程就是原型链查找,上述蓝线就是一整条原型链
验证
- 下面来几行输出验证我们的猜想