Node.js调用类方法报XYZ.getData is not a function错误是什么原因?
问题原因
你定义的getData是XYZ类的实例方法,必须通过类的实例调用,不能直接用类名调用。
两种修复方案
方案1:将方法改为静态方法
在getData方法前加static关键字,修改后的类代码如下:
const _ = require("lodash"); const ObjectId = require("mongoose").Types.ObjectId; const mockLookUps = require("../../data").mockLookUps; class XYZ { // ...... 其他函数 static async getData() { return Promise.resolve(mockLookUps); // JSON Object } } module.exports = XYZ;
修改后你原来的调用方式const x = await XYZ.getData();就可以正常运行。
方案2:先实例化类再调用方法
不需要修改XYZ类的代码,调整调用侧的写法即可:
// 先实例化XYZ类 const xyzInstance = new XYZ(); // 调用实例上的getData方法 const x = await xyzInstance.getData();
原理解释
- 没有加
static修饰的类方法属于原型方法,会被挂载到类的prototype属性上,只有通过new关键字生成的类实例才能访问 - 加了
static修饰的类方法属于静态方法,直接挂载到类本身,不需要实例化就可以通过类名直接调用
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

