资讯专栏INFORMATION COLUMN

[ JS 基础 ] JS 中 instanceof 运算符深入解析 (2)

刘厚水 / 2070人阅读

摘要:在高级的技巧中会用来创建作用域安全的构造函数。运算符希望左操作数是一个对象,右操作数表示对象的类。中对象的类似通过初始化它们的构造函数来定义的。为了理解运算符是如何工作的,必须首先理解原型链原型链可作为的继承机制。

  

在js高级的技巧中会用instanceof来创建作用域安全的构造函数。
instanceof运算符希望左操作数是一个对象,右操作数表示对象的类。如果左侧的对象是右侧类的实例,则表达式返回true;否侧返回falseJavascript中对象的类似通过初始化它们的构造函数来定义的。这样的话,instanceof的右操作数应当是一个函数。比如:

var d = new Date();    //通过计算Date()构造函数来创建一个新对象
d instanceof Date;     //计算结果为true,d是有Date()创建的
d instanceof Object;   //计算结果为true,所有对象都是Object的实例
d instanceof Number;   //计算结果为false,d不是一个Number对象
var a =[1,2,3];        //通过数组直接量的写法创建一个数组
a instanceof Array;    //计算结果为true,a是一个数组
a instanceof Object;   //计算结果为true,所有数组都是对象
a instanceof RegExp;   //计算结果为false,数组不是一个正则表达式
  

需要注意的是,所有对象都是Object的实例。但通过instanceof判断一个对象是否是一个类的实例的时候,这个判断也会包含对“父类”的检测。如果instanceof的左操作数不是一个对象的话,instanceof返回false,如果右操作数不是一个函数,则会抛出一个类型错误异常。

为了理解instanceof运算符是如何工作的,必须首先理解‘原型链’(protetype chain),原型链可作为Javascript的继承机制。Ok,我们来看看表达式‘ person1 instanceof Personjavascript到底是怎么执行的。
首先,Person 会先计算Person .protetype,找到其指向的原型链中的所有对象,然后在这些对象中查找person1 ,如果找到,则说明person1Person 的一个实例,返回true,否侧返回false。这其实就是判断Person.prototypeperson1的内部指针[[prototype]]两者引用是否相同。下图展示了对象之间的关系:

以上是个人结合书本总结,若有不对,请指正。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85571.html

相关文章

  • 从 ++[[]][+[]]+[+[]]==10? 深入浅出弱类型 JS 的隐式转换

    摘要:与此相对,强类型语言的类型之间不一定有隐式转换。三为什么是弱类型弱类型相对于强类型来说类型检查更不严格,比如说允许变量类型的隐式转换,允许强制类型转换等等。在中,加性运算符有大量的特殊行为。 从++[[]][+[]]+[+[]]==10?深入浅出弱类型JS的隐式转换 本文纯属原创? 如有雷同? 纯属抄袭? 不甚荣幸! 欢迎转载! 原文收录在【我的GitHub博客】,觉得本文写的不算烂的...

    miya 评论0 收藏0
  • JS如何准确判断数据类型

    摘要:对于此处的类型都是实例后的对象,并不会深入识别他们的构造函数这里不是数据类型。通过上面的判断,我们知道它并不能满足一些内置构造函数创建的伪类型。 在我的第一篇文章里,介绍过JS各大类型并使用typeof进行输出查看.也有提到过每个函数都有一个自己的内部属性[[class]],这个class指的是js内部分类.这个类的大致包括:数据类型和构造函数这两种。 JavaScript类型介绍 ...

    KitorinZero 评论0 收藏0
  • 深入理解JavaScript

    摘要:深入之继承的多种方式和优缺点深入系列第十五篇,讲解各种继承方式和优缺点。对于解释型语言例如来说,通过词法分析语法分析语法树,就可以开始解释执行了。 JavaScript深入之继承的多种方式和优缺点 JavaScript深入系列第十五篇,讲解JavaScript各种继承方式和优缺点。 写在前面 本文讲解JavaScript各种继承方式和优缺点。 但是注意: 这篇文章更像是笔记,哎,再让我...

    myeveryheart 评论0 收藏0
  • JavaScript instanceof算符深入分析

    摘要:注意基本变量类型不是对象类型,只有基本包装类型才是对象类型。至于显示的原型,在里用属性表示,这个是原型继承的基础知识,在这里就不在叙述了。 前言 如果你要开发一个复杂的产品,那么肯定少不了使用面向对象机制,当然也避不开 Javascript 里面的继承,instanceof 运算符是原生 Javascript 语言中用来判断实例继承的操作符。所以我们有必要深入理解该运算符! inst...

    zhangyucha0 评论0 收藏0
  • 前端面试之路二(javaScript基础整理)

    摘要:在标签中添加属性,本质上是跟在标签里面写属性时一样的,所以属性值最终都会编译为字符串类型。这个节点包括很多,比如,以及一些方法等方法。一个对象有很多,该集合名字为,里面有其他以及,里面有很多。 一、变量类型和计算 JS中使用typeof能得到哪些类型 变量类型 值类型:变量本身就是含有赋予给它的数值的,它的变量本身及保存的数据都存储在栈的内存块当中 引用类型:引用类型当然是分配到...

    AbnerMing 评论0 收藏0

发表评论

0条评论

刘厚水

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<