所以,我在JS中还是个新人。但我试着着手我的第一个更大的项目。然而,我只是不明白为什么我不能从主类之外的函数访问构造函数成员。我以为这与module.exports/require有关。所以,我就是这么做的。不过,运气不好。
以下是main.js文件中的代码:
const funcs = require('./funcs.js');
class MainClass {
constructor(omegga, config, store) {
this.omegga = omegga;
this.config = config;
this.store = store;
}
async init() {
TestVehicle.on('cmd:test', async name => {
const dss = await this.store.get('cats'); // this works fine.
funcs.setSomething('29'); // this errors
console.log(dss);
});
}
}
module.exports = MainClass;
async stop() { }
我的函数funcs.setSomething('29'(错误。以下是funcs.js:中的函数
var MainClass = require('./main.js');
const teampo = new MainClass();
async function setSomething(argument1) {
try {
teampo.store.set('cats', argument1); // this errors
} catch(e) { console.error(e); }
}
module.exports = { setSomething };
现在,JS告诉我,有些东西似乎是未定义的。这是我收到的错误消息:
"TypeError:无法读取未定义的"的属性"set";
我想知道为什么它是未定义的?难道我不应该继承存储及其所有属性/方法吗?我已经尝试了所有的东西,比如更改require、module.exports等。但似乎不起作用。原因可能更严重,还是我犯了一个简单的错误,一直在监督?
当您在这里创建类的实例:const teampo = new MainClass();
时,您没有向它传递它所需要的3件事,即
CCD_ 2。
由于您没有通过store
、this.store
,因此teampo.store
就是undefined
使用const teampo = new MainClass();
实例化类时,不会传递任何参数。构造函数将存储设置为其中一个参数(this.store = store
(。由于没有store参数,因此this.store未定义。
因此,如果您随后尝试对其调用set
,它将出错。