每个函数在建立以后都会拥有一个名为prototype的属性,这个属性指向函数的原型对象。浏览器
隐式原型指向建立这个对象的构造函数(constructor)的prototypeapp
若是在obj中找不到,那么就会沿着__proto__依次查找。函数
实例:spa
声明构造函数A,给A的原型对象添加一个属性和一个方法,prototype
用函数A建立一个对象a:code
1 A.prototype.name = "Jack"; 2 A.prototype.say = function () { 3 console.log("hello"); 4 }
6 function A() { 7 8 } 9 var a = new A( );
咱们来观察一波控制台的输出。。。对象
首先,对象a的__proto__(隐式原型)指向A的prototype(原型对象)blog
而a.__proto__.__proto__又等价于下面那一大串东西,其实也等价于全部对象的祖先的原型对象——Object.prototype继承
而在原型链的定义中,Object.prototype即原型链的终点,再往上就没有了。ip
而构造函数A的prototype,也就是对象a的__proto__所指向的地方
隐式原型指向构造该对象的构造函数的原型(A.__proto__ === A.constructor.prototype)。
由于function是特殊的对象,"Function.prototype"
,即全部函数的原型,一般函数均可以认为是经过new Function制造出来的。
换句话说,Function.prototype
上面承载了用于继承给全部函数的那些属性,例如:call、bind、apply等。
部份内容参考自:https://www.zhihu.com/question/34183746/answer/59043879