这是我写的命令行客户端的片段。
'use strict';
const http = require('http');
const host = "http://localhost:8000"
const stdin = process.stdin, stdout = process.stdout;
const prompt = '\n> ';
function Login() {
this.username = undefined;
this.admin = false;
this.loggedIn = false;
this.options = {};
}
Login.prototype.acceptInput = function(question, callback) {
stdin.resume();
stdout.write(question + prompt);
stdin.once('data', function (data) {
let input = data.toString().trim();
callback(input);
});
};
Login.prototype.request = require('request');
Login.prototype.begin = function() {
// host returns a prompt back to the client, requesting
// login info.
this.request(host, function(error, response, body) {
if (error) throw error;
this.acceptInput(body, function (input) {
//do stuff with user input
});
})
};
let login = new Login();
login.begin();
因此,我已经定义了许多方法,注意在Login原型上声明request
对象以确保它可以处理实例变量。现在,这是我运行这个程序时会发生什么:
this.acceptInput(body, function (input) {
TypeError: this.acceptInput is not a function
我已经能够验证this.request(etc)
是否从主机获得了正确的回复。有了这个,我无法弄清楚为什么this.acceptInput
在这里不被接受。它并不像它是一个全局函数或任何东西 - 如果它是,它将无法处理任何实例变量。我完全坚持这一点,任何帮助都表示赞赏。