【发布时间】:2017-03-02 08:42:56
【问题描述】:
我有一个需要 player.js 的 nodeJS 应用程序。在player.js 中我定义了Player 并添加了Player.updatePacket 方法,但是当我在main.js 中需要它并创建一个播放器实例时,player.updatePacket 是未定义的。
player.js:
module.exports.PLAYER_LIST = {};
var Player = exports.Player = {}
//constructor
Player.create = function(id) {
var tmp = {
id: id,
x: 0,
y: 0
};
PLAYER_LIST[id] = tmp;
return tmp;
}
Player.updatePacket = function() {
return {
id: this.id,
x: this.x,
y: this.y
}
}
main.js:
var Player = require('./player.js')
//get called by socket.io when a client connects
//didn't include socket.io setup in example for brevity, but this function
//is called as expected.
io.sockets.on('connection', function(socket){
var player = new Player(socket.id)
});
setInterval(function() {
var dataArr = [];
for(var i in Player.PLAYER_LIST) {
var player = Player.PLAYER_LIST[i];
console.log(player); //this logs: [Function]
dataArr += player.updatePacket(); //throws TypeError: not a function
}
broadcast("update", dataArr);
}, 1000/25);
我尝试将导出语句移动到player.js 的底部并将updatePacket: function() {/*function contents*/} 放入tmp 对象中,但我仍然得到同样的错误。任何帮助或解释表示赞赏。
【问题讨论】:
-
还有一个错误是你不能在一个对象上 +=。即,您的 dataArr 是一个对象,而不是一个数组。另外,PLAYER_LIST 在哪里?
-
更新 OP 以显示 PLAYER_LIST 并将 dataArr 更改为实际数组
标签: javascript node.js