一、题目

我们先看一道题目

    var F = function() {};   Object.prototype.a = function() {console.log('a');};Function.prototype.b = function() {console.log('b');}var f = new F();f.a(); f.b();F.a(); F.b(); 

二、解题关键


借用网络上的图片,看起来有点绕,待我们一点一点理解。有以下几点:

三、图片解析

  • __proto__ 是原型链的链接
  • 通过 __proto__ 查找到prototypeprototype是原型的关键字
  • var f = new F()

    f: 是实例对象

    F: 是构造函数

    f通过__proto__ 找到F.prototype,所以f.__proto__ === F.prototype

  • 构造器的原型属于对象 Object ,也就是说 F.prototypenew object 出来的。所以 F.prototype通过 __proto__ 可以找到 Object.prototype

    即:F.prototype.__proto__ === Object.Prototype

  • function Function() 是函数构造器

    Function.__proto__ === Function.prototype

    Function.prototype 是对象,所以Function.prototype.__proto__ === Object.prototype

  • 终极:Objecy.prototype.__proto__ === null

四、题目解析

再回过头来看上面的题目

  • f.a(),f 是实例对象, f没有a属性,通过f.__proto__找到原型F.prototypeF.prototype上也没有a属性,继续通过 F.prototype.__proto__找到Object.prototype,发现a属性,所以输出a
  • f.b(),同理找到 Object.prototype,发现Object.prototype也没有b属性,继续通过__proto__查找 到了null,所以b函数不存在,浏览器报错。 则 F.a(),F.b()也不会执行
  • 若注释了 f.b(),执行F.a()。F是函数,F上没有a属性,通过__proto__找到Function.prototype,发现Function.prototype没有a属性,继续通过__proto__,找到Object.prototype,找到了a属性,输出a
  • 若注释了 f.b(),执行F.b()。同理找到Function.prototype,发现b属性,输出b

五、参考资料

JS 原型与原型链

如果有理解不对的地方,欢迎大佬指正!

我所理解的原型原型链 1相关推荐

  1. JS难点剖析-原型原型链

    2019独角兽企业重金招聘Python工程师标准>>> js的原型&原型链&闭包,在很多人看来是区分JS程序员水平的关键知识点,当然对这句话我不是十分赞同.但是掌握这 ...

  2. JavaScript——原型/原型链中的顶层对象(图解)

    本篇需要提前了解的知识储备:原型和原型链,以下仅概要介绍,不作详细讲解. 详细学习可参考: JavaScript--面向对象(封装):https://blog.csdn.net/qq_29493173 ...

  3. js原型和原型链_初识JS原型/原型链/原型继承

    本文思路: 原型->原型链->原型继承->基于原型的继承/ES6中的继承->__proto__与prototype 首先我们知道JS中有对象,比如: var 但是在我们没有对这 ...

  4. 深入理解Linux内核通知链(Notifier)

    数据结构 内核使用struct notifier_block结构代表一个notifier typedef int (*notifier_fn_t)(struct notifier_block *nb, ...

  5. 我所理解的原型原型链

    一.题目 我们先看一道题目 var F = function() {}; Object.prototype.a = function() {console.log('a');};Function.pr ...

  6. 新手理解的JS原型链

    一直以来对于JavaScript 的原型链的概念,始终有些东西有一种模糊感,最近刚好有时间就塌下心认真的把<JavaScript高级程序设计>中相关内容认真读了一遍,也查看了很多网上很多资 ...

  7. 如何更加简单的理解JS中的原型原型链概念

    前面写了很多关于前端经验之谈,今天就来点干货吧.这篇文章将会介绍原型这个概念 原型是整个Javascript中比较重要的概念,如果面向对象想要学好,那么这个东西你必须要了解,不然后面的原型链,继承,多 ...

  8. 新手理解的JS原型链 1

    一直以来对于JavaScript 的原型链的概念,始终有些东西有一种模糊感,最近刚好有时间就塌下心认真的把<JavaScript高级程序设计>中相关内容认真读了一遍,也查看了很多网上很多资 ...

  9. [我的理解]Javascript的原型与原型链

    一.原型与原型链的定义 原型:为其他对象提供共享属性的对象 注:当构造器创建一个对象,为了解决对象的属性引用,该对象会隐式引用构造器的"prototype"属性.程序通过const ...

最新文章

  1. android跨进程读写内存,Android 跨进程内存泄露
  2. 杰瑞服务器虚拟化,大家在Mac中开发PHP,是用虚拟机的方式还是直接在Mac下搭建环境...
  3. 程序员过关斩将-- 工作好多年可能还未真正了解接口和抽象类
  4. mysql ibdata1 损坏_mysql innodb文件ibdata1损坏导致mysql无法启动
  5. 内存和显存_小科普 |“内存”和“显存”有啥关系?
  6. 自动化测试工具之 selenium
  7. 微软又开源了一个机器学习框架,这次是核心产品的机器学习引擎infer.NET
  8. Hadoop学习笔记一:单节点安装
  9. STL中的关联式容器——map(映射)
  10. 如何用五千块的电脑弹奏出价值十万钢琴的效果
  11. 中国生态城市规划行业“十四五”规划与前景规模预测报告2022-2028年版
  12. 数字化转型六图法:数据地图
  13. php龙之战争游戏搭建教程,龙之战争1.02正式版下载
  14. 41 - 找出数组中和为sum的 2个数字 | 找出和为sum的连续正整数序列
  15. Win10应用卸载(针对控制面板的卸载程序页面找不到的那些应用)
  16. 2022-04-07 西安 javaSE(04) 方法可变参数、重载、递归,数组、冒泡排序、二分查找、动态操作,二维数组、jvm内存区域划分
  17. 腾讯云双11服务器优惠报价表详细内容
  18. 你的语言模型有没有“无法预测的词”?
  19. ios 后台唤醒应用_iOS 后台运行机制
  20. RK3588 Android平台SPI NOR+PCIE SSD实现大容量存储方案

热门文章

  1. php jquery ajax输出数组吗,jquery – 从PHP返回数组时的Ajax Parse错误
  2. 半导体物理与器件pdf施敏_西湖大学工学院先进固态半导体实验室行政助理招聘,户籍专业不限!...
  3. 计算机一级考试试题 文明,XP计算机文明基础模拟试题库1.doc
  4. oracle的clob赋值_Java处理(插入或修改)clob类型数据
  5. 格式工厂mac版_格式工厂无广告版,支持PDF文件的转换
  6. python找最大值的函数_Python 获取最大值函数
  7. java导入包写在第二行的吗_使用Java命令行方式导入第三方jar包来运行Java程序的命令...
  8. matlab--曲线拟合
  9. java亲密数的解题思路,算法解题思路总结 - jjhgx的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. linux-RPM安装