前端的兄弟面试多多少少被问到原型的问题,原型是什么?
网上文章太多了,写的很复杂,尤其是有一张像蚯蚓的图看的我头大,看了好多文章结合自己实践总结了下面一张图
JavaScript是一种基于原型的面向对象编程语言
引用mozilla的描述:
JavaScript 只有一种结构:对象。 每个实例对象(object)都有一个私有属性(称之为__proto__)指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象(proto) ,层层向上直到一个对象的原型对象为 null。
根据定义,null 没有原型,是原型链中的最后一个环节。
几乎所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。`
对象分为两种:普通对象object和函数对象function;
概要:
- function有__proto__属性和prototype属性,prototype属性是function独有的;
- 对象都有__proto__属性,通过这个属性找到它的上级;
- 数据类型:null、undefined是没有构造函数的
- Object.prototype是所有对象的爸爸,Object.prototype原型是null。
1 | Object.prototype === {}.__proto__ //true,这个前后反过来写会报错,var a = {};a.__proto__ === Object.prototype;这样就不会 |
原型链
上面的结构图可以看出来,对象的上级以及上级的上级一直到末端到null,这一整条链接关系就是原型链