1.什么是原型链?

每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。

2.原型的作用是什么?

  1. 让实例对象知道谁创建了它
  2. 如果想要给某些类库添加一些方法,可以使用xxx.prototype.method来进行扩展
    1. function Foo() {}
    2. // function 就是个语法糖
    3. // 内部等同于 new Function()
    4. let a = { b: 1 }
    5. // 这个字面量内部也是使用了 new Object()

    总结

  • Object 是所有对象的爸爸,所有对象都可以通过 proto 找到它
  • Function 是所有函数的爸爸,所有函数都可以通过__proto__找到它
  • Function.prototypeObject.prototype 是两个特殊的对象,他们由引擎来创建
    • 这也解释了Function.prototype = Function.__proto__
  • 除了以上两个特殊对象,其他对象都是通过构造器 new 出来的
  • 函数的 prototype是一个对象,也就是原型
  • 对象的 __proto__ 指向原型, __proto__ 将对象和原型连接起来组成了原型链

原型 - 图1