JavaScript中原型及原型链
函数原型对象:
- 每个函数对象中都存在一个prototype属性,该属性默认指向一个空的Object对象,即函数原型对象;同时该函数原型对象上有一个属性constructor,指向该函数对象。
- 可以在函数原型对象上面添加属性和方法,但是一般只在函数原型对象上面添加方法,通过在函数原型上面添加属性和方法后,该函数的所有实例对象自动拥有该属性和方法。
图解:
显式原型和隐式原型
- 每个函数对象都有一个prototype属性,即显式原型。
- 当创建了一个构造函数的实例对象后,该构造函数的实例对象会产生一个__proto__属性,即隐式原型。
- 对象的隐式原型的值为其对应构造函数的显式原型的值,即显式原型和隐式原型指向的是同一个对象。
内存结构图解:
原型链
- 当访问一个对象的属性和方法时,会现在自身寻找,如果没有找到,会沿着原型链在隐式原型对象中寻找,如果找到该属性和方法,返回该属性和方法,如果没有找到,会返回underfined。
图解: