概述
JavaScript 是一种基于原型的面向对象语言。虽然你经常会看到class关键字,但它的底层本质还是用作原型。
原型(prototype)是给其他对象提供共享属性的对象,每个函数都有一个 prototype 属性,它指向的是一个 prototype 对象。每个对象都有一个隐式引用([[Prototype]]),并且 [[Prototype]] 指向它的原型对象,并从中继承数据、结构和行为。同时原型对象同样拥有原型(函数也是对象,它也有[[Prototype]]),这样一层一层,最终指向 null,这种关系被称为原型链
原型
-
prototype : js通过构造函数来创建对象,每个构造函数内部都会一个原型
prototype属性,它指向另外一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法。 -
proto: 当使用构造函数创建一个实例对象后,可以通过
__proto__访问到prototype属性。 -
constructor:实例对象通过这个属性可以访问到构造函数
原型链
每个对象都有 __proto__ 属性,它指向原型对象,原型对象也是对象,也有 __proto__ 属性,并指向它的原型对象,这样一层一层,最终指向 null,这种关系被称为原型链。
原型是如何实现继承的
原型继承有四种方法,以是否手动操作为依据分为隐式原型继承和显式原型继承。
- 隐式原型继承在我们开发中占大多数,即对象字面量和 new,即这两种方法语言底层会帮我们实现创建对象、关联原型和属性初始化。
- 显式原型继承分为 Object.create 和 Object.setPrototypeOf,它能主动设置某个对象为另一个对象的原型
原型和原型链的关系如何
原型是实现继承的方法,原型链是继承的产物