1.构造函数
构造函数用来实例化对象时对对象进行初始化。每个构造函数都具有一个不可枚举的prototype属性,也叫做原型。而原型具有一个constructor属性指向构造函数。不论是构造函数还是原型,都是对象。
var a=new A();
A为构造函数,a为实例,A.prototype为原型对象,A.prototype.constructor为原型对象的一个属性等于A
A.prototype.constructor===A
2.对象
对象分为普通对象和函数(function)function F(); //可以理解为new F()
F.protype.constructor===F;
3.原型链
3.1new实例的原型链
每个用new创建的实例都具有一个__proto__属性,指向构造函数的prototypeFunction Fun(){}
var fun = new Fun();
fun.__proto__ ==== Fun.prototype //两者相等
上面说到原型也是一个对象,那原型是谁的对象呢,答案是Object
所以:Function.prototype.__proto__===Object.prototype
而Object不是任何人的实例所以:Object.__protot__=null
3.2函数对象的原型链
function Fun(){}所有函数对象都是函数Funtion的实例,包括自己,因为自己也是个函数
Fun.__proto__===Function.prototype
Array.__proto__===Function.prototype
String.__proto__===Function.prototype
Function.__proto__===Function.prototype
而原型对象为Object的实例
=>Function.prototype.__proto__===Object.prototype