JS三座大山分别是:原型,this,Ajax,这篇文章就来总结一下原型的一些知识
JS公式
对象.__proto__===其构造函数.prototype
跟公理
//Object.prototype是所有对象的直接或间接原型
a.__proto__.__proto__===Object.prototype//true
函数公理
//所有函数都是由Function构造的,函数有Array,Object,Function
任意函数.__proto__===Function.prototype
还有三个容易混淆的概念,下面我来介绍一下:
混淆一
xxx的原型
- {name:hong}的原型
- [1,2,3]的原型
- Object的原型
解读
Object的原型是Object.proto(√)
Object的原型是Object.prototype(×)
原因
- [的原型]等价于[.proto]
- 中文的原型无法区分与__proto__和prototype
- 所以我们约定,原型默认为__proto__,只不过__proto__正好等于某个函数的prototype
混淆二
- [1,2,3]的原型是是其构造函数.prototype,即Array.prototype
- 又说Object.prototype是所有对象的原型
原理
- 原型分为直接原型和间接原型
- Array.prototype是数组的直接原型
- Object.prototype是数组的间接原型
- 即普通对象是直接原型,数组、函数是间接原型
a.__proto__.__proto__===Object.prototype
true
混淆三(待整理)
Object.prototype是不是根对象