ES6 中检查构造函数是否继承另一个构造函数

2024-03-09

我遇到一种情况,我需要检查构造函数 (X) 的原型链中是否有另一个构造函数 (Y)(或者是 Y 本身)。

最快的方法可能是(new X()) instanceof Y。在这种情况下,这不是一个选项,因为如果在没有有效参数的情况下实例化,相关构造函数可能会抛出异常。

我考虑的下一个方法是:

const doesInherit = (A, B) => {
  while (A) {
    if (A === B) return true;
    A = Object.getPrototypeOf(A);
  }

  return false;
}

这可行,但我无法摆脱这样的感觉:我错过了一些更直接的方法来检查这一点。有吗?


因为方式instanceof有效,你应该能够做到

A.prototype instanceof B

但这只会测试继承,你应该进行比较A === B测试自我参考:

A === B || A.prototype instanceof B

:

class A {}
class B extends A {}
class C extends B {}

console.log(C === C) // true
console.log(C.prototype instanceof B) // true
console.log(C.prototype instanceof A) // true

instanceof基本上实现如下:

function instanceof(obj, Constr) {
  var proto;
  while ((proto = Object.getProtoypeOf(obj)) {
    if (proto === Constr.prototype) {
      return true;
    }
  }
  return false;
}

它迭代对象的原型链并检查是否有任何原型等于构造函数prototype财产。

几乎就像你正在做的那样,但在内部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6 中检查构造函数是否继承另一个构造函数 的相关文章

随机推荐

  • 使用 MS SQL Server 读取包含多个 JSON 对象的文件

    我需要帮助在 MSSQL 中读取 JSON 文件 我有一个像这样的 json 格式 id oid 5c6ceb395916c77f71d9f531 uuid 8337df01 7d98 4cdd b5eb 7fafa88d3740 firs
  • CoreAnimation、AVFoundation 和视频导出功能

    我正在寻找将图片序列导出为 QuickTime 视频的正确方法 我知道 AV Foundation 能够合并或重新组合视频 还能够添加音轨来构建单个视频资产 现在 我的目标有点不同 我想从头开始创建一个视频 我有一组 UIImage 我需要
  • capistrano 部署时使用了错误版本的 Ruby

    在我使用 capistrano 部署到新服务器后 我看到 共享 捆绑 红宝石 1 9 1 gems 我什至没有在服务器上安装 ruby 1 9 1 如果我跑 ruby v它返回 1 9 3 但在所有的 capisrtano 操作中我一直看到
  • Spring、NotReadablePropertyException 和 Glassfish 版本

    我正在开发一个使用 Spring MVC 的 Web 应用程序 它在 Glassfish 3 0 1 上运行良好 但当迁移到 Glassfish 3 1 时 它开始表现得很奇怪 有些页面仅部分显示 或根本不显示任何内容 并且在日志中 有很多
  • 使用正则表达式和 bash 重命名文件[重复]

    这个问题在这里已经有答案了 可能的重复 在unix中一次重命名多个文件 https stackoverflow com questions 1086502 rename multiple files at once in unix 我想使用
  • 应用程序身份验证和应用程序用户的预期用例是什么?

    我试图了解应用程序身份验证和应用程序用户的预期用例是什么 我基本上正在考虑构建一个应用程序 该应用程序将使用 Box 来存储订阅我们服务的用户的数据 我们的服务将允许每个用户访问和查看他们的数据 如果我的帐户基本上拥有所有订阅用户的数据 我
  • 我们可以使用 Bunit 在 Blazor WebAssembly 中进行单元测试控制器吗

    我们可以使用 Bunit x 单元对 Blazor WebAssembly 中的控制器 端点进行单元测试吗 https bunit dev https bunit dev 像这样https learn microsoft com en us
  • 使用Boost.Asio获取“整个数据包”

    我有一个 TCP 客户端连接到我的服务器 它正在发送原始数据包 如何使用 Boost Asio 每次都能获取 整个 数据包 当然是异步的 假设这些数据包可以是任意大小 最多可达我的内存的完整大小 基本上 我想避免创建静态大小的缓冲区 通常
  • 何时使用 TestFixtureSetUp 属性而不是默认构造函数?

    NUnit 文档没有告诉我何时使用带有 a 的方法TestFixtureSetup以及何时在构造函数中进行设置 public class MyTest private MyClass myClass public MyTest myClas
  • webpack-dev-server 编译但不刷新我的网络浏览器

    我正在尝试使用 webpack dev server 热加载 我的 jsx 组件 这是我正在使用的命令 bin webpack dev server host 0 0 0 0 当我保存 jsx 代码时 它会有趣地进行编译 但不会通知我的开发
  • 实体类的 GetHashCode() 的正确实现是什么?

    下面是一个实体基类的重写 Object Equals 的示例实现 应用程序中的所有其他实体都派生自该实体基类 所有实体类都有 Id 属性 它是一个可为 null 的 int 它是实体类对应的任何表的主键 public override bo
  • 如何在控制器中使用辅助函数?

    我在 app helper 文件中编写了一些函数 现在我需要在我的控制器中调用该函数 我如何在 CAKEPHP 中做到这一点 你不能 如果您的函数非常通用 可以在视图之外使用 请在中创建它们bootstrap php或在中创建自定义库 类l
  • 如何让我的Python代码运行得更快

    我正在研究循环多个 netcdf 文件 大 28G 的代码 netcdf 文件在整个域中具有多个 4D 变量 时间 东西 南北 高度 目标是循环这些文件并循环域中所有这些变量的每个位置 并将某些变量存储到一个大数组中 当文件丢失或不完整时
  • 如何从 Angular 规范触发输入 onchange

    我有一个input HTML File filed
  • 尽早设置日志记录:捕获导入期间发出的警告

    我希望所有警告都按照我希望处理日志的方式进行处理 即使这些是在导入库期间发出的 这意味着必须在导入库之前完成日志记录的配置 经过一段时间的搜索后 我认为在自定义中配置日志记录sitecustomize py可能是一个解决方案 But sit
  • 向 Citrix 会话发送消息

    我有在本地和 Citrix 会话上运行的程序 我需要以非常可靠的方式从本地运行的程序向 Citrix 会话上运行的程序发送一位消息 该客户端称为 MetaFrame 演示服务器客户端 到目前为止我想到了以下几种方法 使用 TCP IP 然而
  • sql server中日期时间的内部表示是什么?

    SQL Server 中存储的日期时间值的基础数据结构是什么 2000 和 2005 如果不同 即精确到字节表示 据推测 当您选择日期时间列时获得的默认表示形式是特定于区域性的值 可能会发生变化 也就是说 一些我们看不到的底层结构被格式化为
  • 如何使用 GetAsyncEnumerator 中止正在运行的 EF Core 查询?

    我正在使用 EF Core 5 0 并有以下代码 public async IAsyncEnumerable
  • 在哪里可以找到图片的 Instagram 媒体 ID

    我正在寻找MediaID已上传的 Instagram 图片 它应该看起来像 1234567894561231236 33215652 我发现最后一组整数是usersID 例如 这是直接图像的链接 但是我看不到mediaID以正确的格式 ht
  • ES6 中检查构造函数是否继承另一个构造函数

    我遇到一种情况 我需要检查构造函数 X 的原型链中是否有另一个构造函数 Y 或者是 Y 本身 最快的方法可能是 new X instanceof Y 在这种情况下 这不是一个选项 因为如果在没有有效参数的情况下实例化 相关构造函数可能会抛出