gpt4 book ai didi

javascript - Node.js 和面向对象的 Javascript

转载 作者:行者123 更新时间:2023-12-03 11:59:50 24 4
gpt4 key购买 nike

我正在创建一个游戏,允许与 Node.js 和 Socket.io 进行两个套接字连接。有“主持”和“加入”功能。首先,主机连接,但我想确保它们无法再次连接到另一个游戏,因此我输入一个条件来检查是否已为该套接字创建游戏对象。由于某种原因(使用下面我使用的简化代码),Game 对象未与 UserSocket 对象一起保存。我假设这是一个范围问题,但不太确定。

function Game(gameid) {

this.gameID = gameid;
this.joined = false;
this.active = false;
this.baseball = false;

}

function UserSocket(sock) {

o = this;

o.sock = sock;

o.sock.on('clientData', function (data) {

o.CreateGame(data);

});

o.CreateGame = function (hostdata) {

console.log('in create game');
--->console.log(o.game); //*** this call always returns null

if (o.game) {

console.log('game already started'); // this never happens
return false;
}

newgame = new Game(hostdata);

console.log("game object created");
console.log(newgame.gameID);

newgame.host = o.sock;
o.game = newgame;

console.log(o.game);
arrGames.push(newgame);

o.SendToHostSocket("Hosting game: " + newgame.gameID );

}

}

最佳答案

你至少需要改变:

function UserSocket(sock) {

o = this;

...

对此:

function UserSocket(sock) {

var o = this;

...

按照您的方式,o 是一个隐式全局变量。如果有人第二次调用 new UserSocket() ,您将覆盖 o 中的值,然后您的第一个套接字将不再正常工作。

<小时/>

在 Javascript 中,所有仅在函数内使用的变量应在首次声明时以 var 开头。如果您忽略这一点,那么它们将成为“隐式全局变量”,所有代码都可以访问这些变量,并且可能会无意中被覆盖。隐式全局变量是一种不好的编码习惯,通常会导致错误,事实上,如果您在严格模式下运行代码,这会导致错误,并且代码甚至无法运行。

关于javascript - Node.js 和面向对象的 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25463706/

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