原型的定义
原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
function Person() {} // 这就是一个构造函数
每一个构造函数都有一个原型对象,Person.prototype,这是在函数刚出生时就被定义好了的,是一个对象。此时这个对象里,有一个constructor,指向构造函数 Person() {},还有一个proto指向Object.prototype
构造函数,原型和实例的关系
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。
原型链
假如我们让原型对象等于另一个类型的实例,此时原型对象将会包含一个指向另一个原型的指针,相应的,另一个原型也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。就是所谓的原型链。
原型搜索机制
当以读取模式访问一个实例属性时,首先会在实例中搜索该属性,如果没有找到该属性,就会继续搜索实例的原型,还没找到的话,就会沿着原型链继续向上,直到寻找到Object.prototype
- Object._ proto_=== Function.prototype(因为Function是Object的构造函数)
- Object.prototype._ proto_===null
- '1'._ proto_===String.prototype
- Array._ proto_=== Function.prototype(同理String,Number,Boolean)
- Function.prototype._ proto_ === Object.prototype
网友评论