我目前正在尝试在NodeJS中开发一个小型游戏来学习ES6。 我使用新语法创建了一个“ Player”对象。静态功能完美运行。但是,调用其方法将引发TypeError
(例如:TypeError:socket.handshake.session.player.joinRoom不是函数)。
我不明白为什么,因为我做了一些教程中看到的相同的事情。由于joinRoom是一个setter,因此我尝试在声明之前添加“ set”,但遇到了同样的问题。这是我的代码
Player.js
class Player{
constructor(name){
this.id = Player.setID()
this.name = name
this.currentRoom = ""
this.isOwner = false
this.cards = {}
Player.list[this.id] = this
}
joinRoom(code){
this.currentRoom = code
}
makeOwner(){
this.isOwner = true
}
static setID(){
if(Player.list.length === 0){
return 1
}else{
return Player.list[Player.list.length - 1].id + 1
}
}
}
Player.list = []
module.exports = Player
app.js
// socket.handshake.session.player is initialized with "new Player(playerName)"
socket.on("creatingroom", function(maxPlayers){
console.log(socket.handshake.session.player)
// Returns {id: 1, name: 'chosenName', currentRoom: '', isOwner: false, cards: {}}
var room = new Room(maxPlayers)
socket.handshake.session.player.joinRoom(room.code)
socket.handshake.session.player.makeOwner()
})
感谢您的帮助
答案 0 :(得分:2)
虽然您正在使用的对象似乎具有播放器的所有属性,但看起来它似乎不是从Player类继承的。您可以通过该对象创建一个新的Player:
const player = Object.assign(new Player('Name'), socket.handshake.session.player);
player.joinRoom(12);
player.makeOwner();
console.log(player);
现在player
是一个真实的Player实例,您现在可以在其上调用方法了。