原型及原型链

142 阅读2分钟

原型

(1) 什么是原型

Javascript对象都有一个叫做原型的公共属性,属性名是[proto]。这个原型属性是对另一个对象的引用,通过这个原型属性我们就可以访问另一个对象所有的属性和方法。

(2) 特点

  • 当一个构造函数被创建后,实例对象会继承构造函数的原型属性,这是构造函数的一个非常重要的特性。在Javascript中使用new关键字来对构造函数进行实例化。
  • 每一个构造函数都拥有一个prototype属性,这个属性指向一个对象,也就是原型对象。当使用这个构造函数创建实例的时候,prototype属性指向的原型对象就成为实例的原型对象。
  • 原型对象默认拥有一个constructor属性,指向指向它的那个构造函数(也就是说构造函数和原型对象是互相指向的关系)。
  • 在JavaScript中,所有的对象都是由它的原型对象继承而来,反之,所有的对象都可以作为原型对象存在。

原型链

(1) 原型链概念

JavaScript中所有的对象都是由它的原型对象继承而来。而原型对象自身也是一个对象,它也有自己的原型对象,这样层层上溯,就形成了一个类似链表的结构,这就是原型链(prototype chain)。

(2)特点

  • 平时创建对象时没有创建对应的一些方法(如 toString、valueOf 等方法 ),却可以使用,是因为对象它存在一条原型链,它的查询机制是先查询自己有没有这个属性,有则直接使用;如果没有,则会通过 proto 指向的原型对象里面去找这个属性。
  • Object 是所有对象的爸爸,所有对象都可以通过 proto 找到它,Function 是所有函数的爸爸,所有函数都可以通过 proto 找到它。
  • 所有原型链的终点都是Object函数的prototype属性,因为在JavaScript中的对象都默认由Object()构造。Objec.prototype指向的原型对象同样拥有原型,不过它的原型是null,而null则没有原型。
  • 通过原型链就可以在JavaScript中实现继承,JavaScript中的继承相当灵活,有多种继承的实现方法