__proto__和constructor属性是对象所独有的,prototype属性是函数所独有的
在JS中函数也是一种对象,函数也拥有__proto__和constructor属性
对象由函数生成。生成对象时,对象的__proto__属性指向函数的prototype属性
演示代码function Foo(){...};
var f1 = new Foo();
创建一个构造函数Foo(),并用new关键字实例化,得到实例化对象f1
类型的原型(prototype)prototype是函数所独有的,它是从一个函数指向一个对象,所指的对象就是函数的原型对象
作用: 让函数所实例化的对象都可以找到公用的属性和方法
几乎所有的函数在创建时,会默认创建该函数的prototype对象
原型(proto)__proto__属性是对象所拥有的,__proto__属性都是由一个对象指向另一个对象,也就是指向它们的原型对象(也可以理解为父对象)
作用: 当访问一个对象的属性时,如果该对象内部不存在这个访问的属性,则会去它的__proto__属性所指的对象(父对象)里寻找,如果父对象不存在这个属性,则继续往祖先对象的__proto__所指的对象(爷爷对象)里寻找,一直往上寻找...直到原型链顶端null,此时如果继续往上相当于在null上取属性,系统就会报错(null可以理解为原型链的终点,到该点时结束),以上从访问的对象到null的一条链,我们称为原型链
我们平时调用多数方法都是靠__proto__继承的
prototype所指的函数原型对象和__proto__所指原型对象是不同的
构造函数(constructor)Constructor也是对象才拥有的,他是由一个对象指向函数,指向该对象的构造函数,每个对象都有构造函数(本身拥有或继承,继承要结合__proto__属性查看),Function这个对象的构造函数是它自己本身,所有函数和对象最终都是由Funtion构造函数得来的,Constructor属性的终点即为Function这个函数
原型与原型链