摘要:在高级的技巧中会用来创建作用域安全的构造函数。运算符希望左操作数是一个对象,右操作数表示对象的类。中对象的类似通过初始化它们的构造函数来定义的。为了理解运算符是如何工作的,必须首先理解原型链原型链可作为的继承机制。
在js高级的技巧中会用instanceof来创建作用域安全的构造函数。
instanceof运算符希望左操作数是一个对象,右操作数表示对象的类。如果左侧的对象是右侧类的实例,则表达式返回true;否侧返回false。Javascript中对象的类似通过初始化它们的构造函数来定义的。这样的话,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 Person ’ javascript到底是怎么执行的。
首先,Person 会先计算Person .protetype,找到其指向的原型链中的所有对象,然后在这些对象中查找person1 ,如果找到,则说明person1是Person 的一个实例,返回true,否侧返回false。这其实就是判断Person.prototype与person1的内部指针[[prototype]]两者引用是否相同。下图展示了对象之间的关系:
以上是个人结合书本总结,若有不对,请指正。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85571.html
摘要:与此相对,强类型语言的类型之间不一定有隐式转换。三为什么是弱类型弱类型相对于强类型来说类型检查更不严格,比如说允许变量类型的隐式转换,允许强制类型转换等等。在中,加性运算符有大量的特殊行为。 从++[[]][+[]]+[+[]]==10?深入浅出弱类型JS的隐式转换 本文纯属原创? 如有雷同? 纯属抄袭? 不甚荣幸! 欢迎转载! 原文收录在【我的GitHub博客】,觉得本文写的不算烂的...
摘要:对于此处的类型都是实例后的对象,并不会深入识别他们的构造函数这里不是数据类型。通过上面的判断,我们知道它并不能满足一些内置构造函数创建的伪类型。 在我的第一篇文章里,介绍过JS各大类型并使用typeof进行输出查看.也有提到过每个函数都有一个自己的内部属性[[class]],这个class指的是js内部分类.这个类的大致包括:数据类型和构造函数这两种。 JavaScript类型介绍 ...
摘要:深入之继承的多种方式和优缺点深入系列第十五篇,讲解各种继承方式和优缺点。对于解释型语言例如来说,通过词法分析语法分析语法树,就可以开始解释执行了。 JavaScript深入之继承的多种方式和优缺点 JavaScript深入系列第十五篇,讲解JavaScript各种继承方式和优缺点。 写在前面 本文讲解JavaScript各种继承方式和优缺点。 但是注意: 这篇文章更像是笔记,哎,再让我...
摘要:注意基本变量类型不是对象类型,只有基本包装类型才是对象类型。至于显示的原型,在里用属性表示,这个是原型继承的基础知识,在这里就不在叙述了。 前言 如果你要开发一个复杂的产品,那么肯定少不了使用面向对象机制,当然也避不开 Javascript 里面的继承,instanceof 运算符是原生 Javascript 语言中用来判断实例继承的操作符。所以我们有必要深入理解该运算符! inst...
摘要:在标签中添加属性,本质上是跟在标签里面写属性时一样的,所以属性值最终都会编译为字符串类型。这个节点包括很多,比如,以及一些方法等方法。一个对象有很多,该集合名字为,里面有其他以及,里面有很多。 一、变量类型和计算 JS中使用typeof能得到哪些类型 变量类型 值类型:变量本身就是含有赋予给它的数值的,它的变量本身及保存的数据都存储在栈的内存块当中 引用类型:引用类型当然是分配到...
阅读 615·2021-11-24 09:39
阅读 3460·2019-08-30 15:53
阅读 2496·2019-08-30 15:44
阅读 3223·2019-08-30 12:54
阅读 2193·2019-08-29 12:23
阅读 3284·2019-08-26 14:05
阅读 2079·2019-08-26 13:36
阅读 3407·2019-08-26 13:33