什么是原型?

每一个函数身上,都有一个 prototype 的属性,称为“原型”。

  1. function Person() {
  2. }
  3. console.log(Person.prototype); // {constructor: ƒ}

每一个对象身上,都有一个__proto__ 的属性,称为“隐式原型”。

  1. function Person() {
  2. }
  3. const person = new Person();
  4. console.log(person.__proto__);

结论:每一个对象的 __proto__,都指向创建该对象的函数的prototype
原型 prototype 及 原型链 - 图1

原型链

原型链就是由对象的 __proto__ 和函数的 prototype 组成的一个链条。
原型链的作用就是,当一个对象在使用自己身上不存在的属性或方法时,就可以沿着原型链到函数的 prototype 身上去查找。
原型 prototype 及 原型链 - 图2