【JavaScript】原型与原型链

原型与原型链

一、什么是原型

  1. 每一个JavaScript 对象(null 除外)在创建时会与之关联另一个对象,这个被关联的对象称之为原型(原型对象)。
  2. 每一个对象都会从原型中‘继承’(委托)原型对象的属性。
  3. 每个函数(箭头函数除外)都有一个特殊的属性叫作原型(prototype),这个属性指向调用该构造函数而创建的实例的原型。
  4. 原型对象中有一个属性constructor, 它指向函数对象。

二、什么是prototype

  1. prototype就是显示原型
  2. prototype是函数才有的属性,这个属性指向调用该构造函数而创建的实例的原型
  3. 指向原型对象
  4. 箭头函数是没有 prototype 属性的
  5. prototype 被定义为:给其它对象提供共享属性的对象
  6. 并不是所有的函数都有 prototype 属性,由函数 bind()方法返回的函数就没有 prototype 属性。
  7. 函数的 prototype 属性,在定义函数时自动添加 prototype,默认是一个空 Object 对象

prototype的作用:
它的作用就是包含可以由特定类型的所有实例共享的属性和方法,也就是让该函数的实例化对象们都可以找到公用的属性和方法。
即:节省内存空间,实现数据共享

在这里插入图片描述

三、什么是 __ proto __

  1. __ proto __就是隐式原型
  2. 每一个 JavaScript 对象( null 除外)都有一个属性,叫 __ proto __ ,这个属性指向该对象的原型。
  3. 指向原型对象
  4. 所有的函数都是 Function 函数的实例(包括Function自己),所以他们的 __ proto __ 自然也就都指向 Function 原型对象(Function.prototype)
  5. Object函数是所有对象通过原型链追溯到最根的构造函数。Object 函数的 prototype 中的 __ proto __ 指向 null

__ proto __(隐式原型对象)的作用:
当访问一个对象的属性或方法时,如果该对象内部不存在这个属性,那么就会从它的 __ proto __ 属性所指向的(原型)对象中寻找(原型也是对象,也有它自己的原型),如果原型对象中也找不到,就会继续在该原型对象的原型对象中找,以此类推,直到找到属性或方法为止,或者查找到顶层原型对象 null,就结束查找,返回 undefined。

在这里插入图片描述

四、什么是 constructor

  • 每个原型都有一个 constructor 属性指向关联的构造函数。
  • constructor 属性的终点就是 Function 这个函数。
  • Function 这个对象比较特殊,它的构造函数就是它自己。
    在这里插入图片描述

五、原型/构造函数/实例之间的关系

在这里插入图片描述

六、原型链

1、什么是原型链:
  • 当读取实例对象的属性时,如果找不到,就会查找与该对象关联的原型对象中的属性,如果还查不到,就去找原型的原型,一直找到为止,或者查找到顶层原型对象
    null,就结束查找,返回 undefined。在此过程中,由互相关联的原型组成的链状结构就是 原型链
2、原型链中查找属性方法和访问原型链中的原型对象的区别:
  1. 在原型链中查找属性或方法,如果没有查找到相关属性或方法,返回的是 undefined,表示原型链中没有该属性或方法。
  2. 而通过访问原型链中的原型对象,到达原型链终点,即 Object.prototype 的值为 null。

以上是我根据两个网站的文档做的简单的总结,更加深入具体的内容请前往这两个网站查看:

原型与原型链 | 前端那些事儿

原型链 - JavaScript Guidebook

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值