gpt4 book ai didi

javascript - 类型错误 : "method" is not a function

转载 作者:搜寻专家 更新时间:2023-10-31 23:19:16 25 4
gpt4 key购买 nike

我目前正在尝试用 NodeJS 开发一个小游戏来学习 ES6。我用新语法创建了一个“Player”对象。静态函数完美运行。但是,调用它的方法会抛出 TypeError

(ex : TypeError: socket.handshake.session.player.joinRoom is not a function).

我不明白为什么,因为我做了我在几个教程中看到的同样的事情。由于 joinRoom 是一个 setter,我尝试在声明之前添加“set”,但我遇到了同样的问题。这是我的代码

播放器.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 实例,您现在可以调用它的方法。

关于javascript - 类型错误 : "method" is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57665466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com