千家信息网

JavaScript如何手动实现instanceof

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关JavaScript如何手动实现instanceof,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. instanceof的用法ins
千家信息网最后更新 2026年11月01日JavaScript如何手动实现instanceof

这篇文章将为大家详细讲解有关JavaScript如何手动实现instanceof,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1. instanceof的用法

instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。

function Person() {}function Person2() {}const usr = new Person();console.log(usr instanceof Person); // trueconsole.log(usr instanceof Object); // trueconsole.log(usr instanceof Person2); // false

如上代码,定义了两个构造函数,Person和Person2,又实用new操作创建了一个Person的实例对象usr。

实用instanceof操作符,分别检验构造函数的prototype属性是否在usr这个实例的原型链上。

当然,结果显示,Person和Object的prototype属性在usr的原型链上。usr不是Person2的实例,故Person2的prototype属性不在usr的原型链上。

2. 实现instanceof

明白了instanceof的功能和原理后,可以自己实现一个instanceof同样功能的函数:

function myInstanceof(obj, constructor) {    // obj的隐式原型    let implicitPrototype = obj?.__proto__;    // 构造函数的原型    const displayPrototype = constructor.prototype;    // 遍历原型链    while (implicitPrototype) {        // 找到,返回true        if (implicitPrototype === displayPrototype) return true;        implicitPrototype = implicitPrototype.__proto__;    }    // 遍历结束还没找到,返回false    return false;}

myInstanceof函数接收两个参数:实例对象obj和构造函数constructor。

首先拿到实例对象的隐式原型:obj.__proto__,构造函数的原型对象constructor.prototype。

接着,就可以通过不断得到上一级的隐式原型:

implicitPrototype = implicitPrototype.__proto__;

来遍历原型链,寻找displayPrototype是否在原型链上,若找到,返回true。

当implicitPrototype为null时,结束寻找,没有找到,返回false。

原型链其实就是一个类似链表的数据结构。

instanceof做的事,就是在链表上寻找有没有目标节点。从表头节点开始,不断向后遍历,若找到目标节点,返回true。遍历结束还没找到,返回false。

3. 验证

写一个简单的实例验证一下自己实现的instanceof:

function Person() {}function Person2() {}const usr = new Person();function myInstanceof(obj, constructor) {    let implicitPrototype = obj?.__proto__;    const displayPrototype = constructor.prototype;    while (implicitPrototype) {        if (implicitPrototype === displayPrototype) return true;        implicitPrototype = implicitPrototype.__proto__;    }    return false;}myInstanceof(usr, Person); // truemyInstanceof(usr, Object); // truemyInstanceof(usr, Person2); // falsemyInstanceof(usr, Function); // falsemyInstanceof(usr.__proto__, Person); // falseusr.__proto__ instanceof Person; // false

可以看到,myInstanceof正确得出了结果。

关于"JavaScript如何手动实现instanceof"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

原型 函数 实例 对象 属性 实用 篇文章 节点 手动 不断 两个 功能 就是 更多 目标 结果 验证 不错 代码 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 鸠鸠互联网科技 互联网品科技 工业互联网科技新基建 合肥互联网科技公司 互联网科技英文 齐家互联网科技 云创客互联网科技公司 深圳国际航运科技和互联网 宁夏众和广鑫互联网科技有限公司 互联网5g黑科技有哪些 链环科技传统企业怎么转型互联网 互联网科技和法律行业 深圳市罗太互联网科技有限公司 互联网科技创新的路径 工业互联网展湾科技股份有限公司 锡山区互联网智能科技产品供应 互联网科技企业商标注意事项 万物互联网智能科技 长沙渺峰互联网科技有限公司 科技和互联网公司 远拓互联网科技 华脉科技工业互联网产品 深圳国际航运科技和互联网 宁夏科技产业互联网案例 昭通互联网科技选哪家 互联网科技产业特征 玉溪互联网科技怎么选 燊美集互联网科技有限公司 北京天晋互联网科技有限公司
0