什么是原型链?

JavaScript是面向对象的,每个实例对象都有一个__proto__属性,该属性指向它的原型对象,这个实例对象的构造函数有一个原型属性prototype,与实例的proto属性指向同一个对象。当一个对象在查找一个属性的时候,自身没有就会根据__proto__向它的原型进行查找,如果都没有,则向它的原型的原型继续查找,直到查到Object.prototype.proto_为null,这样也就形成了原型链。

原型对象和实例之间有什么作用呢?

通过一个构造函数创建出来的多个实例,如果都要添加一个方法,给每个实例去添加并不是一个明智的选择。这时就该用上原型了。

在实例的原型上添加一个方法,这个原型的所有实例便都有了这个方法。

var M = function (name) { this.name = name; }
var o3 = new M('o3')
  • 实例就是对象,在本例中o3就是实例,M就是构造函数。

  • 实例通过new一个构造函数生成的。

  • 从上图中可以知道,实例的proto指向的是原型对象。

  • 实例的构造函数的prototype也是指向的原型对象。

  • 原型对象的construor指向的是构造函数。

    补充:

    只有函数有prototype,对象是没有的。

    但是函数也是有proto的,因为函数也是对象。函数的proto指向的是Function.prototype。

原文地址:https://www.cnblogs.com/zhaosijia----1234/p/10451590.html