什么是原型:

  1,我们所创建的每一个函数,解析器都会向该函数对象添加一个属性prototype,这个属性指向一个对象,这个对象就是我们所谓的原型对象

  2,如果我们将函数作为普通函数调用时,prototype基本没有任何作用;当函数作为构造函数使用时,构造函数所创建的对象中都会有一个隐含属性,这个隐含属性指向创建它的构建函数的原型对象(好像有点绕……),我们可以通过__proto__来访问该属性

  3,原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象(我们可以将对象中共有的内容,统一设置到原型对象中)

使用方法或者属性时的一个内部查找顺序(有必要知晓):

  (1)当访问一个对象的属性/方法时,首先查找这个对象自身有没有该属性

  (2)如果没有就查找它的原型(也就是__proto__指向的构造函数prototype原型对象)

  (3)如果还没有找到就查找原型对象的原型,就是prototype.__proto__,它应该是指向Object构造函数的原型对象-我理解为原型对象是由Obejct这个构造函数创建的

  (4)依次类推,如果还没有,则它会查找Object构造函数原型的原型,也就是Object构造函数的prototype.__proto__,如果打印它,你会发现它是null

  

原型链:

ps:有没有觉得很像一个链条呢

总结:

  我们这里需要重点知晓的是,原型对象也是对象,是对象就是用构造函数创建出来的,而最终他们都指向Object的构造函数的原型对象的原型对象,也就是null;事实上,我们可以把Object构造函数当做是一切对象的祖先(包括Function构造函数,它的__proto__也是指向Object),还需要知晓Js内部查找属性和方法的一个规则,熟知这些,那么理解原型和原型链就没什么难度了

  嗯嗯……,写的好像有点乱,如果有大佬发现此文中的错误,可以指正出来,毕竟才接触前端没多久,只是个人对原型的一些总结和理解,如果后续有更深入的理解或有更简洁的描述,会再进行补充或修改

最新文章

  1. iOS 私有变量 私有方法
  2. 史上最全的 Redux 源码分析
  3. IDL中的HRESULT值
  4. webpack 插件: html-webpack-plugin
  5. codeforces 360 C - NP-Hard Problem
  6. 【转载】Serial NOR Flash and U-Boot
  7. python: shutil模块 -拷贝文件
  8. 玩转HTML5移动页面(动效篇)
  9. Eclipse设置保存时自动给变量加final
  10. mysql增量备份 percona-xtrabackup
  11. sql 添加字段备注和查看已添加表的备注
  12. php生成签名及验证签名
  13. RACSignal的Subscription深入
  14. SourceTree管理工具的一些使用总结
  15. Android为TV端助力 关于JNI的使用方法
  16. lua 特殊时间格式转换
  17. Linux-Centos7 安装图形界面
  18. Machine Learning in action --LogisticRegession 逻辑回归
  19. Jenkins 01——简介
  20. 测试开发之前端——No3.HTML5中的标准属性

热门文章

  1. 计算机视觉基本原理——RANSAC
  2. 简述MySQL数据库中的Date,DateTime,TimeStamp和Time类型
  3. SubLime Text3 常用插件总结
  4. 12c OCR corrupted results in CRS stack down.
  5. jdbc连接方法
  6. 高性能/并发的保证-Netty在Redisson的应用
  7. XSS编码问题的个人总结
  8. Linux命令后面加 & 的作用
  9. IDEA 正式版终于支持中文版和 JDK 直接下载了(太方便了)附介绍视频
  10. PTA | 1008 数组元素循环右移问题 (20分)