我正在尝试使用NodeJS尝试创建一个基本的Socket.IO服务器以获得它的乐趣,并且我遇到了一个令我困惑的问题。
这是我的服务器代码。相当短,只有一个事件。
// Create the server and start listening for connections.
var s_ = require('socket.io')(5055);
var Session = require('./Session');
var connections = [];
var dummyID = 0;
// Whenever a connection is received.
s_.on('connection', function(channel) {
connections[channel] = new Session(channel, ++dummyID);;
console.log("Client connected with the ID of " + dummyID);
// Register the disconnect event to the server.
channel.on('disconnect', function() {
delete connections[channel];
console.log("A Client has disconnected.");
});
channel.on('login', function(data) {
if(data.username !== undefined && data.password !== undefined) {
var session = connections[channel];
if(session !== undefined) {
session.prototype.authenticate(data.username, data.password);
}
}
});
});
此行引发错误:
session.prototype.authenticate(data.username, data.password);
说"认证"无法在undefined上调用,这意味着会话原型未定义。根据上面的检查,会话本身并不是未定义的。这是Session.js
var Session = function(channel, dummyID) {
this.channel = channel;
this.dummyID = dummyID;
};
Session.prototype = {
authenticate: function(username, password) {
if(username == "admin" && password == "admin") {
this.channel.emit('login', {valid: true});
} else {
this.channel.emit('login', {valid: false});
}
}
};
module.exports = Session;
正如你可以看到原型显然在那里,我导出了Session对象,我真的很困惑这个问题是什么。任何帮助将不胜感激。
答案 0 :(得分:2)
只需调用您添加到对象原型的函数
session.authenticate(data.username, data.password);
答案 1 :(得分:0)
This article非常清楚地解释了原型继承链,尤其是图表。
另外还有一个提示:javascript中的所有对象在继承链中都有一个__proto__属性,请记住这一点有很大帮助。