原型:咱们建立的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象, 而这个对象的用途是包含能够由特定类型的全部实例共享的属性和方法。javascript
咱们随意定义一个函数java
function Person(){}
咱们能够经过函数
Person.prototype
访问 **function Person()**的原型。prototype
原型**prototype是一个指针,指向一个对象**,所以指针
typeof Person.prototype =="object";//true
在默认状况下,全部原型对象都会自动得到一个constructor (构造函数)属性,这个属性包含一个指向prototype 属性所在函数的指针。code
代码求证:对象
Person.prototype.constructor==Person;//true
实例的内部将包含一个指针(内部 属性),指向构造函数的原型对象。ECMA-262 第5 版中管这个指针叫[[Prototype]]。虽然在脚本中 没有标准的方式访问[[Prototype]],但Firefox、Safari 和Chrome 在每一个对象上都支持一个属性 proto;图片
每个对象都有一个[[Prototype]]属性,指向实例在构造函数的原型,咱们能够经过__proto__访问此属性。ip
p=new Person(); p.__proto__
[[Prototype]]链接存在于实例与构造函数的原型对象之间,而不是存在于实例与构造函数之间原型
p.__proto__==Person.prototype;//true p.__proto__==Person.constructor;//false
每一个对象都有 [[Prototype]]属性,原型也是一个对象,因此原型也有 [[Prototype]]属性,咱们能够经过以下方式访问:
Person.prototype.__proto__
MDN对**Object.prototype.proto** 属性在定义为:
指向当对象被实例化的时候,用做原型的对象。
意思差很少就是原型的原型。