原型链是如何运转的

70 阅读1分钟

前提:继承主要是依靠原型链实现

原型链

其基本思想是原型让一个引用类型继承另一个引用类型的属性和方法。

构造函数,原型和实例的基本关系

每个构造函数都有一个原型对象,原型对象都会有一个指向构造函数的指针,而实例包含一个指向原型对象的指针。
如果,假设将实例对象的原型对象指向另一个实例对象,而另一个实例对象的原型对象又指向另另外一个实例对象,如此,就构成了实例和原型的原型链

For example

```function SuperType(){
    this.property = true
}

SuperType.prototype.getSuperValue = function(){
    return this.property
}

function SubType (){
    this.subproperty = false
}

SubType.prototype = new SuperType() 

SubType.prototype.getSubValue = function(){
    return this.subproperty
}


var instance = new SubType()
alert(instance.getSuperValue()) //true

![原型链图解.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/24ed0194127b499c92eb6088606833ea~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=2204&h=1490&s=88115&e=png&b=ffffff)
//示例来源:红宝书

寻找getSuperValue()时,会先在实例中搜索,如无,则搜索subType.prototype ,若还无,则搜索superType.prototoye,直至搜索到原型链的末端
关于其中的继承:subType继承了superType , superType 继承了 Object

补充

所有函数的默认原型都是Object的实例所以默认原型都会包含一个指针,指向Object.prototype,这也就是所有自定义类型都是继承toString(),valueOf()等默认方法的根本原因