简单理解原型链

  • 什么是原型 ?

我是这样理解的:每一个JavaScript对象在创建的时候就会与之关联另外一个特殊的对象,这个对象就是我们常说的原型对象,每一个对象都会从原型“继承”属性和方法。

  • 什么是原型链 ?

一个由有限个原型对象组成的用来实现继承和共享属性的对象链。

打个通俗的比方,可以把原型链理解成一个家族的血亲关系,每一个后代都会从父代身上继承该家族特有的基因和特征。

  • 什么是"继承" ?

关于原型的继承,我们常说每一个对象都会从原型上"继承"属性,实际上,此"继承"并非意味着简单的复制,而是一个可访问的通道,引用《你不知道的JavaScript》中的一句话:

继承意味着复制操作,然而JavaScript默认并不会复制对象的属性,相反,JavaScript只是在两个对象之间创建一个关联,这样,一个对象就可以通过委托访问另一个对象的属性和函数,所以与其说是继承,委托的说法反而更加准确。

三个概念

prototype

  • 构造函数特有的属性
  • 指向一个原型对象,对象存储了要共享给实例的属性和方法

_proto_

  • 实例对象的一个指针属性
  • 指向上层构造函数对应的prototype,即自己的原型对象

constructor

  • 原型对象的一个属性
  • 指向原型对象的构造函数
  • 通过new创建实例时,对象会继承该属性

对象的原型链

Object

  • 作为对象:Object.__proto__ = Function.prototype
  • 作为函数:Object.prototype是原型链的顶端,Object.prototype.__proto__ = null

Function

  • 作为对象:Function.__proto__ = Function.prototype
  • 作为函数:Function.prototype用于共享,而Function.prototype__proto__继承自Object.prototype

Array

  • 作为对象:Array.__proto__ = Function.prototype
  • 作为函数:Array.prototype用于共享,Array.prototype.__proto__继承自Object.prototype

Person

  • 作为对象:Person.__proto__ = Function.prototype

  • 作为函数:Person.prototype用于共享,Person.prototype.__proto__继承自Object.prototype

    原型链关系:

核心

  1. 原型链顶端是Object.prototype

  2. JavaScript原生对象(Object、Function、Array等)都是Function的实例,它们的__proto__均指向Function.prototype

  3. 除了Object,所有原生对象(构造函数)的prototype,均继承自Object.prototype

  4. JavaScript数据结构

    JavaScript数据结构和原型链之间的关系如下图:

最新文章

  1. 修改msde登录方式,设置sa密码为空
  2. 认识Visual Studio 条件编译
  3. cocos2d-x之json文件读取初试
  4. VEP安装指南
  5. 在oracle中创建空间索引
  6. JSON解析总结2
  7. 微软职位内部推荐-Sr SDE for Win Apps Ecosystem
  8. LoadRunner安装包(性能测试工具分享)
  9. 浏览器测试功能(jquery1.9以后已取消)
  10. 《Effective C++ 》学习笔记——条款03
  11. boost json生成和解析用法
  12. Linux红黑树(二)——访问节点
  13. MoveWindow and SetWindowPos
  14. SQL函数学习(四):charindex()函数
  15. [LeetCode] Escape The Ghosts 逃离鬼魂
  16. 解决Postman User-Agent 设置失效
  17. 1.4 Crack小实验
  18. MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询
  19. MICROSOFT SQLSERVER 总结
  20. jQuery.ajax实现根据不同的Content-Type做出不同的响应

热门文章

  1. 判断一个数组的长度用 Length 还是 SizeOf ?
  2. 表观 | Enhancer | ChIP-seq | 转录因子 | 数据库专题
  3. adc0和adc1
  4. 惠普打印机和扫描仪修复医生 HP Print and Scan Doctor
  5. Composer三步曲:安装、使用、发布
  6. 【插件】thinkphp5+百度编辑器自定义上传
  7. 深入理解ElasticSearch(PDF版 内含目录)
  8. DEBUG技巧里的问题1 双击某个变量不能显示
  9. 静态站点生成器-md-pelican
  10. c#写windows服务 小demo