面向对象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
相关产品推荐
相关产品推荐

