我试图解决LeetCodehttps://leetcode.com/problems/check-if-object-instance-of-class/description/中的2618s问题,我想知道是否有一种方法可以只使用Prototype、Proto和Constructor等属性来解决它,而不使用While循环和instanceof?

我试了很多例子,但都不管用

  return obj.constructor.prototype === classFunction.prototype

 if (classFunction === Number || classFunction === String || classFunction === Date) {
        return obj.__proto__ === classFunction.prototype
    } else return obj.__proto__.constructor.__proto__.prototype === classFunction.prototype

推荐答案

不幸的是,如果您不想使用特定于JS的工具,如instanceofObject::isPrototypeOf(),则需要遍历原型链.如果不允许while循环,则可以使用递归:

const checkIfInstanceOf = (obj, classFunction) => {
  if(obj === null || obj === undefined || !classFunction?.prototype) return false;
  const proto = Object.getPrototypeOf(obj);
  return proto === classFunction.prototype || checkIfInstanceOf(proto, classFunction);
};

console.log(checkIfInstanceOf(new RegExp, RegExp));
console.log(checkIfInstanceOf(new RegExp, Object));
console.log(checkIfInstanceOf('', String));
console.log(checkIfInstanceOf());

Javascript相关问答推荐

获取加载失败:获取[.]添加时try 将文档添加到Firerestore,Nuxt 3

是否有方法在OpenWeatherMap API中获取过go 的降水数据?

TypScript界面中的Infer React子props

使用复选框在d3.js多折线图中添加或删除线条

为什么ngModel不能在最后一个版本的Angular 17上工作?'

如何从隐藏/显示中删除其中一个点击?

无法读取未定义错误的属性路径名''

如何在Angular17 APP中全局设置AXIOS

如何强制Sphinx中的自定义js/css文件始终加载更改而不缓存?

编辑文本无响应.onClick(扩展脚本)

如何在文本字段中输入变量?

React.Development.js和未捕获的ReferenceError:未定义useState

在Java中寻找三次Bezier曲线上的点及其Angular

使用Nuxt Apollo在Piniastore 中获取产品细节

如何限制显示在分页中的可见页面的数量

expo 联系人:如果联系人的状态被拒绝,则请求访问联系人的权限

Node.js API-queryAll()中的MarkLogic数据移动

在传单的图像覆盖中重新着色特定 colored颜色 的所有像素

如果查询为空,则MongoDB将所有文档与$in匹配

找不到处于状态的联系人