js中构造函数、实例化对象、以及原型对象的三角关系!!!

168 阅读2分钟

简介

JavaScript 原型,原型链 ? 有什么特点?
  • 原型是我们创建函数的时候,系统帮我们自动生成的一个对象。 主要作用是解决构造函数内部方法内存资源浪费问题。在开发中我们一般把实例对象一些通用的方法放入原型中,在 vue 里面有时候也会给 vue 的原型添加一些公共类方法来实现所有的组件中可以共享成员。像一些常见的routerrouter和store 都是挂载到 vue 的原型上的。

  • 原型链是 js 对象一种查找机制,遵循就近原则。当我们访问一个对象中的成员的时候,会优先访问自己的,如果自己没有就访问原型的,如果原型也没有就会访问原型的原型,直到原型链的终点 null. 如果还没有,此时属性就会获取 undefined,方法就会报错 xxx is not a function。一般原型链主要是用来实现面向对象继承的。

构造函数

构造函数可以通过 prototype 访问原型, 也可以通过 new 进行实例化对象

对象

对象可以通过 constructor 访问构造函数, 也可以通过 __ proto __ 访问原型

原型

原型可以通过 constructor 访问构造函数, 也可以通过 __ proto __ 访问到 Object 的原型 Object.prototype

Object

它可以通过 prototype 访问到 Object的原型 Object.prototype, Object的原型 Object.prototype 可以通过 constructor 访问的Object

Object.prototype

再往上找 找到的是 null

关系简版图

image.png

代码解释

由构造函数到原型对象

image.png

image.png

沿原型链继续查找

image.png

image.png

// 从原型对象出发查找Object.prototype用__proto__方法

// 也就是说原型对象上有一条链式结构,可以在原型对象的基础上进一步使用__proto__方法查找

// 如下判断:

image.png

image.png

// 原型对象也可以逆向查找构造函数本身

  // 如下判断:
  
  

image.png

image.png

image.png

// 沿着原型链一直往下查找 最终会找到一个null

image.png

image.png

小结:还有一些三者之间的关系以及查找方法这里就不一一列举了,有兴趣有需要的可以深入研究!!!

如下图等:

image.png