先看一个例子:
Grand.prototype.lastName = "Deng";
function Grand(){}
var grand = new Grand();
Father.prototype = grand;
function Father(){
this.name = "xiaowang"
}
var father = new Father();
Son.prototype = father;
function Son(){
this.name = "xiaoLiu"
}
var son = new Son();
这样就构成了原型链,访问顺序按照由近及远的原则。
访问son.lastName,会输出“deng”,由此可以看出当访问对象的属性时,如果对象不存在该属性,就会顺着__proto__指向的原型中去寻找,Son的原型是father,但是father中也没有这个属性,因此,就会顺着father的原型去找,father的原型是grand,grand的原型中有这个属性,因此就会输出grand原型中的属性。
像这样,将这些对象之间通过__proto__属性建立起相互之间的联系,就构成了一条原型链。
**注:**大多数对象的原型都是Object.prototype。