**

js中的instanceof运算符

**
概述

instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上
语法

obj instanceof Object;//true 实例obj在不在Object构造函数中

描述

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
实例
1.instanceof的普通的用法,obj instanceof Object 检测Object.prototype是否存在于参数obj的原型链上。

Person的原型在p的原型链中

function Person(){};
var p =new Person();
console.log(p instanceof Person);//true

2.继承中判断实例是否属于它的父类

Student和Person都在s的原型链中

function Person(){};
function Student(){};
var p =new Person();
Student.prototype=p;//继承原型
var s=new Student();
console.log(s instanceof Student);//true
console.log(s instanceof Person);//true

3.复杂用法

这里的案例要有熟练的原型链的认识才能理解

function Person() {}
console.log(Object instanceof Object); //true
//第一个Object的原型链:Object=>
//Object.proto => Function.prototype=>Function.prototype.proto=>Object.prototype
//第二个Object的原型:Object=> Object.prototype

console.log(Function instanceof Function); //true
//第一个Function的原型链:Function=>Function.proto => Function.prototype
//第二个Function的原型:Function=>Function.prototype

console.log(Function instanceof Object); //true
//Function=>
//Function.proto=>Function.prototype=>Function.prototype.proto=>Object.prototype
//Object => Object.prototype

console.log(Person instanceof Function); //true
//Person=>Person.proto=>Function.prototype
//Function=>Function.prototype

console.log(String instanceof String); //false
//第一个String的原型链:String=>
//String.proto=>Function.prototype=>Function.prototype.proto=>Object.prototype
//第二个String的原型链:String=>String.prototype

console.log(Boolean instanceof Boolean); //false
//第一个Boolean的原型链:Boolean=>
//Boolean.proto=>Function.prototype=>Function.prototype.proto=>Object.prototype
//第二个Boolean的原型链:Boolean=>Boolean.prototype

console.log(Person instanceof Person); //false
//第一个Person的原型链:Person=>
//Person.proto=>Function.prototype=>Function.prototype.proto=>Object.prototype
//第二个Person的原型链:Person=>Person.prototype

总结

对应上述规范做个函数模拟A instanceof B:

function _instanceof(A, B) {
var O = B.prototype;// 取B的显示原型
A = A.proto;// 取A的隐式原型
while (true) {
//Object.prototype.proto === null
if (A === null)
return false;
if (O === A)// 这里重点:当 O 严格等于 A 时,返回 true
return true;
A = A.proto;
}
}

JS instanceof用法相关推荐

  1. instanceof用法_「JS很简单」JavaScript 基础之 instanceof操作符

    最近开始在整理ES6/ES7/ES8/ES9的知识点(已经上传到 我的博客 上),碰到一些知识点是自己已经忘记(用得少的知识点),于是也重新复习了一遍. 这篇文章要复习的 instanceof 是我在 ...

  2. Javascript模块化编程require.js的用法

    JS模块化工具requirejs教程(一):初识requirejs http://www.runoob.com/w3cnote/requirejs-tutorial-1.html JS模块化工具req ...

  3. java instanceof 动态_Java关键字instanceof用法及实现策略

    instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class 其中 obj 为一 ...

  4. Moment.js常见用法总结

    From: https://www.jianshu.com/p/9c10543420de Moment.js常见用法总结 Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中 ...

  5. Moment.js常见用法总结 1

    Moment.js常见用法总结 Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率. ​ 日常开发中,通常会对时间进行下面这几个操作:比如获取时 ...

  6. Toastr.js插件用法

    toastr.js插件用法 toastr.js是一个基于jQuery的非阻塞通知的JavaScript库.toastr.js可以设定四种通知模式:成功.出错.警告.提示.提示窗口的位置.动画效果等都可 ...

  7. highlight.js css,JS库之Highlight.js的用法详解

    下载到本地后,新建个页面测试 1.在head中加入css和js的引用 highlight hljs.initHighlightingOnLoad(); 2.添加对应要显示的内容 # 读取文件内容 de ...

  8. js截取图片 裁剪图片之cropper.js插件用法详解

    js截取图片 裁剪图片之cropper.js插件用法详解 源码:https://github.com/fengyuanchen/cropper 引入+使用 <link href="/p ...

  9. commander.js基本用法

    准备工作 安装nodejs 安装commander.js,执行npm install commander --save version方法 作用:定义命令程序的版本号 参数说明: 版本号<必须& ...

最新文章

  1. 情人节|致爱丽丝……
  2. 面试题: mysql数据库 已看1 简单的sql练习
  3. Android开发——跟随手指的小球实现
  4. volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域
  5. 如何从完整的文件路径中分离文件名和路径名?
  6. 你确定你会使用git commit?
  7. 贪婪算法在解决哈夫曼树及编码问题中的应用
  8. MySQL笔记-简单配置主从库
  9. rsyslogd以及日志轮替logrotate的梳理
  10. H5自带的type=date或者month等日期控件移动端显示placeholder
  11. Python 父类调用子类方法
  12. 探秘联想台北研发中心 扒一扒system x是如何炼成的?
  13. 华南师范大学计算机考研考场,2018考研:华南师范大学考场安排
  14. 中国富豪第一桶金挖掘的九大方式
  15. 微信扫码充值 php,PHP原生微信扫码支付
  16. CV大牛/实验室主页
  17. Gym - 101291I Mismatched Socks(贪心)
  18. JAVA 类的继承(私有属性、自动转型)(入门级小白一看就懂)
  19. 北斗卫星同步时钟(NTP网络时钟服务器)成功投运世界级工程港珠澳大桥
  20. 亚马逊跨境电商美国站店铺产品运营是什么?亚马逊美国站店铺产品开发主要做什么?

热门文章

  1. 有几万闲钱,投资什么好?
  2. 几种常用RAID的特性
  3. qq 飞信中无法切换输入法
  4. Qt5文件及磁盘处理
  5. DAMA-CDGA认证-第11章数据仓库和商务智能
  6. 视频教程-征服Node.js 7.x视频课程(5):使用Buffer处理二进制数据-Node.js
  7. 安卓手机来电防火墙_安卓基础知识自动化测试
  8. python判断手机号码是否正确_Python.弄清楚如何输入正确的电话号码
  9. 电脑 服务器 运行输入网址,win10电脑输入法不见了_网站服务器运行维护
  10. C语言编程判断是否为2的幂,C语言判断一个数是否是2的幂次方或4的幂次方