javascript - TypeError:“方法”不是函数
问题描述
我目前正在尝试用NodeJS开发一个小游戏来学习ES6。我使用新语法创建了一个“播放器”对象。静态功能完美运行。但是,调用它的方法会引发 TypeError
(例如:TypeError:socket.handshake.session.player.joinRoom 不是函数)。
我不明白为什么,因为我做了我在几个教程中看到的同样的事情。由于 joinRoom 是一个设置器,我尝试在声明之前添加“设置”,但我遇到了同样的问题。这是我的代码
播放器.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
应用程序.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()
})
谢谢你的帮助
解决方案
虽然您正在使用的对象似乎具有播放器的所有属性,但它看起来好像不是从 Player 类继承的。不过,您可以从该对象创建一个新 Player:
const player = Object.assign(new Player('Name'), socket.handshake.session.player);
player.joinRoom(12);
player.makeOwner();
console.log(player);
现在作为player
一个真正的 Player 实例,您现在可以在其上调用方法。
推荐阅读
- c - C 主函数应该返回什么?EXIT_SUCCESS 还是 0?
- android - Google 登录在 iOS 上不返回姓名、图片、名字、姓氏,但在 Android 上有效
- php - JWT 无法仅在实时站点上从请求中解析令牌
- javascript - 发送多封电子邮件时显示进度
- semantic-ui - 使用语义 UI 的可见性在溢出的 div 中进行无限滚动
- windows - 如何在 vbscript 中使用字符串变量作为 telnet 命令?
- python - 将 json 转换为具有指定数据类型的 csv
- python - 如何将高斯模糊应用于“matplotlib”中的图形?
- sql - 如果不存在则插入表并在两种情况下都返回 id
- php - 在 OneToMany 关系上 cascade={"remove"} 的教义行为与同一实体的 ManyToOne