每个对象都有一个指针指向它的原型(prototype),可以通过Object.getPrototypeOf(obj)方法可以获取obj对象的原型,又因原型也是对象,同理,它也有一个指针指向它自己的原型,那么如此类推就构成了原型链。
举个例子:
有如下场景
Man extends Person extends Object
var a = new Man();
a的原型就是Man.prototype
Man.prototype也是一个对象,那么它也有一个指针指向它自己的原型,那就是Person.prototype
同理,Person.prototype的原型就是Object.prototype
Object.prototype也是对象,同理,只不过它的原型为null,那么也就到了原型链的末端
a的原型链路如下图
记住一点:对象的原型就是它的构造函数的原型,照样拿上图的a对象来举例的话,也就是:a.__proto__ === Man.prototype