4.0 JavaScript-原型和原型链

原型

我们先从内存中分析这段代码的执行过程
在这里插入图片描述
在这里插入图片描述
在内存空间中,两个一模一样的函数同时创造了两份,这样浪费了内存空间
解决问题

  • 当你需要给示例对象添加方法
  • 直接书写在构造函数内
  • 我们的原型就是解决了这个问题
  • 不好的原因
  • 当我把函数方法书写在构造函数体内
  • 每次创建实例的时候,都会创建一个函数数据类型
  • 多个函数方法,一模一样,但是占据了多分存储空间

原型

原型

  • 概念:每一个构造函数天生自带一个prototype属性,是一个对象数据类型
  • 概念:每一个对象天生自带一个属性 __proto__,指向所属构造函数的 prototype
  • 概念:当你访问对象的成员的时候,首先在自己身上查找,如果没有自动去到__proto__上查找

原型:

  • 构造函数天生自带的一共 prototype
  • 作用:有构造函数添加方法,专门给实例对象使用

如何解决问题

  • 我们把需要添加给实例的方法,放在构造函数的原型(prototype)上
  • 就可以有实例进行访问使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样我们new出来的多个实例对象一模一样的方法只占用了一个空间,注意必须与new连用

原型链

原型链

原型链

  • 用__proto__ 串联起来的对象链状结构
  • ==注意:==使用__proto__
  • 每一个对象数据类型,都有一个属于自己的原型链
  • 作用:为了访问成员对象

对象访问机制

  • 当你需要访问对象的成员的时候
  • 首先在自己身上查找,如果有直接使用
  • 如果没有,会自动去__proto__上查找
  • 如果还没有,就再去__proto__上查找
  • 知道Object.prototype上也没有,那么就返回undefined

原型链分析
原型链
原型链内存分析

猜你喜欢

转载自blog.csdn.net/weixin_46073653/article/details/124788606