当前位置: 首页 > web >正文

解释instanceof

 instanceof检查左侧的__proto__是否等于右侧的prototype

function Animal() {}
Animal.prototype.eat = function() { console.log("Eating...") };function Dog() {}
Dog.prototype = new Animal(); // Dog 继承 Animal
Dog.prototype.bark = function() { console.log("Bark!") };const myDog = new Dog();
因为
console.log(myDog.__proto__=== Dog.prototype);//true
console.log(myDog.__proto__.__proto__=== Animal.prototype);//true
所以
console.log(myDog instanceof Dog)//true
console.log(myDog instanceof Animal)//true
无论经过几层的__proto__,只要能找到prototype就是true

如果修改了prototype,会影响结果

function Parent() {}
function Child() {}
Child.prototype = Object.create(Parent.prototype);const child = new Child();
console.log(child instanceof Child);  // true
console.log(child instanceof Parent); // true(因Parent.prototype在原型链中)// 动态修改prototype的影响
function Foo() {}
const obj = new Foo();
console.log(obj instanceof Foo); // true
Foo.prototype = {}; // 修改prototype
console.log(obj instanceof Foo); // false(obj的原型链未更新)

 

手动实现instanceof

function myInstanceOf(obj, Constructor) {if (typeof obj !== 'object' || obj === null) return false;let proto = Object.getPrototypeOf(obj);while (proto !== null) {if (proto === Constructor.prototype) return true;proto = Object.getPrototypeOf(proto);}return false;
}

http://www.xdnf.cn/news/1230.html

相关文章:

  • 营收持续增长,恩威医药价值重估再现
  • 【信息安全工程师备考笔记】第二章 网络信息安全概述
  • 典籍知识问答典籍查询界面前端界面设计效果实现
  • MySQL:如何用关系型数据库征服NoSQL核心战场?
  • 【STL】unordered_map
  • iptables
  • MYOJ_7443《洛谷 U556408 》【模板】二叉树基础训练 (自己上传的题,想上主题库qwq)(二叉树基础操作模板)
  • 【c语言】指针和数组笔试题解析
  • 科研小白可以做哪些准备
  • 推公式——耍杂技的牛
  • 每日OJ_牛客_AOE还是单体?_贪心_C++_Java
  • MyBatis 和 MyBatis-Plus 在 Spring Boot 中的配置、功能对比及 SQL 日志输出的详细说明,重点对比日志输出的配置差异
  • 如何使用 Spring Boot 实现统一功能处理:从零开始打造高效、可扩展的后台系统
  • Feign 深度解析:Java 声明式 HTTP 客户端的终极指南
  • 乐视系列玩机---乐视1s x500 x501 x502等系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • 纽约大学具身智能体在城市空间中的视觉导航之旅!CityWalker:从海量网络视频中学习城市导航
  • 第六章 QT基础:1、入门操作:文件操作与信号槽机制笔记
  • StarRocks 异常 Table creation timed out.
  • 小白训练日记——2025/4/22
  • 虚拟机的网络配置
  • 美团外卖霸王餐接口该如何对接?
  • C++STL(七) :unordered_set、unordered_map的介绍及使用
  • transformer-位置编码
  • Lawrence Krauss 的“从无中诞生的宇宙”(Universe from Nothing)
  • MCP Host、MCP Client、MCP Server全流程实战
  • 耀百岁中医养生与上海隽生中医药研究中心达成战略合作——共筑中医养生科研创新高地
  • 乐视系列玩机---乐视1 x600系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • RK3588 ubuntu20禁用自带的TF卡挂载,并设置udev自动挂载
  • 学习思路分享---从0开始搭建基本web服务器
  • (一)初始Linux---------Linux的背景