原型对象和原型链

作者 : 开心源码 本文共923个字,预计阅读时间需要3分钟 发布时间: 2022-05-13 共218人阅读
原型对象
  1. 每一个构造函数都有一个原型对象
    每一个原型对象里都有一个指向构造函数的指针(constructor)
    每一个实例对象都有一个指向原型对象的内部指针(proto)
    原型对象上的属性和方法能够被实例对象访问

  2. 实例对象通过内部指针指向原型对象,原型对象通过指针指向构造函数

  3. 构造函数是生成对象的模板,对象是构造函数的实例

  4. prototype 通过构造函数生成对象实例时,会将对象实例的原型指向构造函数的prototype属性
    每一个构造函数都有一个prototype属性,这个属性就是对象实例的原型对象

原型的概念
  • JavaScript的所有对象中都包含了一个[proto]内部属性,这个属性所对应的就是自身的原型

  • JavaScript的函数对象,除了原型[proto]外,还有prototype属性;当函数对象作为构造函数创立实例时,该prototype属性值将被作为实例对象的原型[proto]

原型链的概念

当一个对象调用自身不存在的属性或者者方法时,就会去自己[proto]关联的前辈prototype对象上去找,假如没找到,就会去该prototype原型[proto]关联的前辈prototype去找。以此类推,直到找到该属性或者者方法或者者undefined为止。从而形成了所谓的”原型链”。

小结

JavaScript中的对象,都有一个内置属性[prototype],指向这个对象的原型对象。当查找一个属性或者者方法时,假如在当前对象中找不到,会继续在当前对象的原型对象中查找;假如原型对象中仍然没有找到,会继续在原型对象的原型中查找(原型也是对象,也有它自己的原型);直到找到为止,或者者查找到最顶层的原型对象中也没有找到,就结束查找,返回undefined。这个查找过程是一个链式的查找,每个对象都有一个到它自身原型对象的链接,这些链接组建的整个链条就是原型链。拥有相同原型的多个对象,他们的共同特征正是通过这种查找模式表现出来的。
在上面的查找过程,提到了最顶层的原型对象,这个对象就是Object.prototype,这个对象中保存了最常用的方法,如toString、valueOf、hasOwnProperty等,因而我们才能在任何对象中使用这些方法。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 原型对象和原型链

发表回复