You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何判断对象为指定类的直接实例,排除继承类实例?

原生JS判断对象是否为类的直接实例方案

你要的isMemberOf功能可以通过直接比对实例的隐式原型和目标类的prototype属性实现,原生JS没有内置该方法,可通过如下方式封装:

实现代码

function isMemberOf(instance, targetClass) {
  // 非对象类型/ null直接返回false
  if (instance === null || typeof instance !== 'object') return false
  // 直接比对实例原型和类的prototype属性
  return Object.getPrototypeOf(instance) === targetClass.prototype
}

测试效果

用你给出的示例类测试效果如下:

class A {}
class B extends A {}

let x = new A();
let y = new B();

console.log(isMemberOf(x, A)) // 输出 true
console.log(isMemberOf(y, A)) // 输出 false,符合预期
console.log(isMemberOf(y, B)) // 输出 true

原理说明

JS中通过构造函数直接new生成的实例,它的原型会严格指向该构造函数的prototype对象。子类实例的原型指向的是子类自身的prototype,只有原型链更上层才会指向父类的prototype,因此直接比对原型可以过滤掉继承自父类的子类实例。

注意:不推荐使用instance.constructor === targetClass的方式实现,该方式在手动修改了原型对象的constructor属性时会出现判断错误,稳定性不如直接比对原型。

内容的提问来源于stack exchange,提问作者DexieTheSheep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:03:06