NodeJS this.var 未定义
NodeJS this.var is undefined
index.js
const request = require('request');
class ScheduleDownloader {
ScheduleDownloader(schoolId, username, schoolPassword) {
this.schoolId = schoolId;
this.username = username;
this.schoolPassword = schoolPassword;
}
getScheduleAtDate(dateString) {
console.log(`https://${this.username}:${this.schoolPassword}@www.myurl.de/${this.schoolId}/vplan/vdaten/VplanKl${dateString}.xml`)
/*request({url: `https://${this.username}:${this.schoolPassword}@www.myurl.de/${this.schoolId}/vplan/vdaten/VplanKl${dateString}.xml`}, (err, res, body) => {
if(err) console.error(err);
console.log(body);
});*/ // COMMENTED OUT FOR TESTING
};
module.exports = ScheduleDownloader;
var s = new ScheduleDownloader(10192417, 'schueler', 'S53998t');
s.getScheduleAtDate(20200317); // For testing in this class
输出
https://undefined:undefined@mnyurl.de/undefined/vplan/vdaten/VplanKl20200317.xml // undefined
https://www.myurl.de/10192417/vplan/vdaten/VplanKl20200317.xml // What it should be
如您所见,我正在尝试请求 xml 文件。我发现 this.username 等是未定义的。
我该如何解决?这是什么原因? (抱歉,我是新手Javascript)
在 javascript 构造函数被称为构造函数,而不是 class 的名称,因此您的函数 ScheduleDownloader 永远不会被调用。
将其更改为构造函数:
一些阅读:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
那不是你在 es6 中声明构造函数的方式。
试试这个
constructor(schoolId, username, schoolPassword) {
this.schoolId = schoolId;
this.username = username;
this.schoolPassword = schoolPassword;
}
您的 class 定义设置不正确。我想你是想使用 constructor
?
class ScheduleDownloader {
constructor(schoolId, username, schoolPassword) {
this.schoolId = schoolId;
this.username = username;
this.schoolPassword = schoolPassword;
}
getScheduleAtDate(dateString) {
console.log(`https://${this.username}:${this.schoolPassword}@www.myurl.de/${this.schoolId}/vplan/vdaten/VplanKl${dateString}.xml`)
/*request({url: `https://${this.username}:${this.schoolPassword}@www.myurl.de/${this.schoolId}/vplan/vdaten/VplanKl${dateString}.xml`}, (err, res, body) => {
if(err) console.error(err);
console.log(body);
});*/ // COMMENTED OUT FOR TESTING
};
}
var s = new ScheduleDownloader(10192417, 'schueler', 'S53998t');
s.getScheduleAtDate(20200317); // For testing in this class
index.js
const request = require('request');
class ScheduleDownloader {
ScheduleDownloader(schoolId, username, schoolPassword) {
this.schoolId = schoolId;
this.username = username;
this.schoolPassword = schoolPassword;
}
getScheduleAtDate(dateString) {
console.log(`https://${this.username}:${this.schoolPassword}@www.myurl.de/${this.schoolId}/vplan/vdaten/VplanKl${dateString}.xml`)
/*request({url: `https://${this.username}:${this.schoolPassword}@www.myurl.de/${this.schoolId}/vplan/vdaten/VplanKl${dateString}.xml`}, (err, res, body) => {
if(err) console.error(err);
console.log(body);
});*/ // COMMENTED OUT FOR TESTING
};
module.exports = ScheduleDownloader;
var s = new ScheduleDownloader(10192417, 'schueler', 'S53998t');
s.getScheduleAtDate(20200317); // For testing in this class
输出
https://undefined:undefined@mnyurl.de/undefined/vplan/vdaten/VplanKl20200317.xml // undefined
https://www.myurl.de/10192417/vplan/vdaten/VplanKl20200317.xml // What it should be
如您所见,我正在尝试请求 xml 文件。我发现 this.username 等是未定义的。 我该如何解决?这是什么原因? (抱歉,我是新手Javascript)
在 javascript 构造函数被称为构造函数,而不是 class 的名称,因此您的函数 ScheduleDownloader 永远不会被调用。 将其更改为构造函数: 一些阅读: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
那不是你在 es6 中声明构造函数的方式。 试试这个
constructor(schoolId, username, schoolPassword) {
this.schoolId = schoolId;
this.username = username;
this.schoolPassword = schoolPassword;
}
您的 class 定义设置不正确。我想你是想使用 constructor
?
class ScheduleDownloader {
constructor(schoolId, username, schoolPassword) {
this.schoolId = schoolId;
this.username = username;
this.schoolPassword = schoolPassword;
}
getScheduleAtDate(dateString) {
console.log(`https://${this.username}:${this.schoolPassword}@www.myurl.de/${this.schoolId}/vplan/vdaten/VplanKl${dateString}.xml`)
/*request({url: `https://${this.username}:${this.schoolPassword}@www.myurl.de/${this.schoolId}/vplan/vdaten/VplanKl${dateString}.xml`}, (err, res, body) => {
if(err) console.error(err);
console.log(body);
});*/ // COMMENTED OUT FOR TESTING
};
}
var s = new ScheduleDownloader(10192417, 'schueler', 'S53998t');
s.getScheduleAtDate(20200317); // For testing in this class