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

为何"instanceof Mixin(Class)"判断不生效?求原生JS解决方案

问题分析与解决办法

为什么代码输出false?

每次调用Foo(Bar)时,都会创建一个全新的匿名类。FooBar继承的是第一次调用Foo(Bar)生成的类,而console.log里的Foo(Bar)是第二次调用生成的另一个完全独立的类。instanceof的判断逻辑是检查对象的原型链上是否存在目标构造函数的prototype属性,这两个类的prototype完全不同,所以结果自然是false。

原生JavaScript解决办法

给Foo添加缓存机制,让同一个classToExtend传入时返回同一个类,避免重复创建:

class Bar {}

const Foo = (() => {
  // 用Map缓存已生成的类
  const classCache = new Map();
  return (classToExtend) => {
    if (classCache.has(classToExtend)) {
      return classCache.get(classToExtend);
    }
    const ExtendedClass = class extends classToExtend {};
    classCache.set(classToExtend, ExtendedClass);
    return ExtendedClass;
  };
})();

class FooBar extends Foo(Bar) {}

let fb = new FooBar;

// 现在输出true
console.log(fb instanceof Foo(Bar));

这个方案利用闭包保存缓存,确保相同的基类传入时,Foo始终返回同一个扩展类,这样两次Foo(Bar)指向的是同一个构造函数,instanceof就能正确返回true。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:10:43