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

面向对象JavaScript问题:调用example.example()报TypeError原因排查

解决TypeError: example.example is not a function的问题

嘿,我来帮你理清楚这个问题出在哪,以及怎么修复:

首先,咱们先拆解你代码里的几个关键问题:

  • 混淆了类本身和类的实例:你把类赋值给了变量example,但直接尝试用类去调用example()方法——类本身是构造函数,不是实例,只有实例才能调用实例方法。
  • 属性名与方法名冲突(且未定义目标方法):你的类里根本没有example这个方法,反而在构造函数里给实例添加了一个名为example的布尔属性(值为false),就算实例化了类,这个example也是布尔值,自然不是函数。

修复方案

如果你原本需求是有一个名为example的方法,能切换内部状态并返回结果,可以这么改:

var example = class {
  constructor(){
    this._example = false; // 把内部状态属性名改成带下划线的,避免和方法名冲突
  }
  // 定义example方法
  example(){
    this._example = !this._example;
    return this._example;
  }
};

// 第一步:实例化类
const myInstance = new example();
// 第二步:调用实例的example方法
console.log(myInstance.example()); // 输出 true
console.log(myInstance.example()); // 输出 false

如果你只是想保留原来的id方法,那正确的调用方式是:

var example = class {
  constructor(){
    this.example = false;
  }
  id(){
    this.example = !this.example;
    return this.example;
  }
};

// 先实例化类
const inst = new example();
// 调用id方法
console.log(inst.id()); // 输出 true

关键点再强调下

  • 类必须通过new关键字实例化后,才能调用它的实例方法;直接用类本身调用的是静态方法(需要用static关键字定义)。
  • 实例的属性名和方法名不能重复,否则属性会覆盖方法(或反过来),导致调用时出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:22:16