要说清这个问题,首先先了解什么是原型,什么是原型链。
在Javascript世界中,一切皆是对象,函数是javascript语言的一等对象。因为函数可以创建对象。
每个函数都有一个prototype属性,该属性指向一个对象,该对象就是原型对象。
当调用函数方法时,首先会在当前的实例对象里查找,如果在当前的实例对象没有找到,则在查找当前的实例对象的原型对象,若当前的实例对象的原型对象还是找到,就到当前的实例对象的原型对象的原型对象里查找…,这样形成了一条链,这条链就叫原型链。
函数的原型链是从函数实例开始,它的末端到哪里?
定义一个函数对象,当实例化该对象时,它的原型会指向Function对象。在Javascript中,一切皆对象,所以,Function对象的原型也就指向Object对象。
Object对象也可以通过Object函数创建,所以Object对象也是有原型的。
Object对象的原型到底指向哪儿?
只有两种可能:一是自身,二是空对象null。
首先分析指向自身,即Object对象
当函数对象沿原型链查找时,找到Object对象时,会形成一个无限循环。
指向空对象则不同,就像易经说的一样,无极生太极,太极生两仪,两仪生四象…最后无穷无尽。