概念
prototype在javascript中我们都叫它原型、而javascript中所有对象都带有prototype
属性。由于有了这个属性,也让javascript中顶级对象Object和普通对象、内置对象建立了关系、比如javascript中的继承也是通过原型链的关系实现的。
带有prototype属性的对象
Object.prototype
Array.prototype
Number.prototype
String.prototype
Boolean.prototype
RegExp.prototype
Date.prototype
Error.prototype
proto和原型链
- proto是所有对象上都有的属性 这个属性指向一个对象
- 原型链只有内置对象或者是实例过的对象上才带有的属性
原型总结
实例化之前
- 首先定义对象function fa() {}
- 实例化之前 fa上有prototype和proto属性
- fa.prototype.proto == Object.prototye
- fa.proto == Function.prototype
- Function.prototype.proto == Object.prototype
- 因此 fa.proto.proto <==> fa.prototype.proto__
实例化之后
- var f = new fa();
- f上只有proto属性 对于prototype只有在实例之前才有 或者内置对象Array Date …上才有
- f.proto == fa.prototype
- 因此f.proto.proto == fa.prototype.proto == fa.proto.proto
原型链示意图