又介绍一个老朋友——instanceof。

对于值类型,你可以通过typeof判断,string/number/boolean都很清楚,但是typeof在判断到引用类型的时候,返回值只有object/function,你不知道它到底是一个object对象,还是数组,还是new Number等等。

这个时候就需要用到instanceof。例如:

上图中,f1这个对象是被Foo创建,但是“f1 instanceof Object”为什么是true呢?

至于为什么过会儿再说,先把instanceof判断的规则告诉大家。根据以上代码看下图:

Instanceof运算符的第一个变量是一个对象,暂时称为A;第二个变量一般是一个函数,暂时称为B。

Instanceof的判断队则是:沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。

按照以上规则,大家看看“ f1 instanceof Object ”这句代码是不是true? 根据上图很容易就能看出来,就是true。

通过上以规则,你可以解释很多比较怪异的现象,例如:

这些看似很混乱的东西,答案却都是true,这是为何?

正好,这里也接上了咱们上一节说的“乱”。

上一节咱们贴了好多的图片,其实那些图片是可以联合成一个整体的,即:

看这个图片,千万不要嫌烦,必须一条线一条线挨着分析。如果上一节你看的比较仔细,再结合刚才咱们介绍的instanceof的概念,相信能看懂这个图片的内容。

看看这个图片,你也就知道为何上面三个看似混乱的语句返回的是true了。

问题又出来了。Instanceof这样设计,到底有什么用?到底instanceof想表达什么呢?

重点就这样被这位老朋友给引出来了——继承——原型链。

即,instanceof表示的就是一种继承关系,或者原型链的结构。请看下节分解。

(注:本节的图片来源于http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/figure1.jpg)

---------------------------------------------------------------------------

本文已更新到《深入理解js原型和闭包》的目录更多内容可参考《深入理解js原型和闭包》

转载于:https://www.cnblogs.com/lauzhishuai/p/10077980.html

【学习笔记】深入理解js原型和闭包(5)——instanceof相关推荐

  1. 【学习笔记】深入理解js原型和闭包(11)——执行上下文栈

    继续上文的内容. 执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境.当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境.处于活动状态的执行 ...

  2. 【学习笔记】深入理解js原型和闭包(9)—— 简述【执行上下文】下

    继续上一篇文章(https://www.cnblogs.com/lauzhishuai/p/10078231.html)的内容. 上一篇我们讲到在全局环境下的代码段中,执行上下文环境中有如何数据: 变 ...

  3. 深入理解javascript原型和闭包(16)——完结

    之前一共用15篇文章,把javascript的原型和闭包. 首先,javascript本来就"不容易学".不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学java ...

  4. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  5. 深入理解javascript原型和闭包(17)——补this

    本文对<深入理解javascript原型和闭包(10)--this>一篇进行补充,原文链接:http://www.cnblogs.com/wangfupeng1988/p/3988422. ...

  6. 深入理解javascript原型和闭包(3)——prototype原型

    既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...

  7. JS学习笔记六:js中的DOM操作

    1. JS学习笔记六:js中的DOM操作 文章目录 1. JS学习笔记六:js中的DOM操作 1.1. 获取Dom节点 1.2. 元素属性的操作方式 1.3. DOM节点的创建.插入和删除 1.4. ...

  8. 深入理解JavaScript原型与闭包

    说明 本文为作者学习记录相关笔记及理解,如有不妥之处,请各位读者积极指出, 虽然标题是深入理解,但可能存在许多不够深入的地方,请各位小伙伴不吝赐教 一切都是对象 一切引用类型都是对象,对象是属性的集合 ...

  9. 【JavaScript学习笔记2】JS中常见的输出方式-控制台输出信息

    引言 在编程开发的过程中,输出信息是非常必要的.JS中提供了四种输出方式:弹出显示框.控制台输出.弹出输入框.弹出判断显示框 弹出显示框 这种方式在上一篇笔记中已经详细介绍,有需要学习的朋友可以跳转到 ...

最新文章

  1. 关于举办第十七届全国大学生智能汽车竞赛的通知-加盖公章
  2. IN-我的生活in记 | 手摸手产品研究院
  3. 怎样修改iis 服务器日期,怎么在IIS里设置服务器端缓存时间?
  4. P2053-修车【网络流,费用流】
  5. SuperMap/PlottingSymbol
  6. pythonlist排序算法_Python版常见的排序算法
  7. Leetcode每日一题:328.odd-even-linked-list(奇偶链表)
  8. python元祖组成字典_Python基础之元组和字典
  9. yum [Errno 256] No more mirrors to try 解决方法
  10. 关于地图矢量下载器的使用感受
  11. VR · AR · MR 与 科幻 (序)
  12. Medusa工具使用(转)
  13. 管理者如何做好团队规划
  14. 二等水准测量记录数据_2等水准测量原始记录表
  15. 长 三 角 制 造 - 香 港 服 务
  16. 微信小程序解析并上传excel
  17. 配置聚合连接 和 配置firewalld防火墙
  18. 图片按指定比例缩放并压缩至指定大小,解决保存图片文件体积过大bug。
  19. 20个免费下载PSD设计网站
  20. 一个喜欢搜罗软件的哥们

热门文章

  1. android面试题之一
  2. jQuery 选择器模糊匹配
  3. 好久没更新日志了啊~!!今天发一个AS3的播放器
  4. .Net开发时有没有好的页面开发框架?
  5. python源代码的后缀名是_Python代码编译与反编译
  6. sql 将多个括号及内容删除_新浪微博将对逝者账号设置保护:不能登录、新发和删除内容...
  7. oracle idm suite,CorelDRAW Graphics Suite 2018官方英文试用版 离线直接安装 下载地址
  8. android density 和款高度,Android Density(密度)
  9. 海天 oracle,Oracle执行计划详解
  10. 在三角形中rt是什么意思_数学中RT三角形是什么意思