Не удается добавить свойство к внешнему объекту из области действия функции?

#javascript #socket.io

#javascript #socket.io

Вопрос:

У меня есть функция, которая дает мне объект сокета внутри функции io.on(). Однако, когда я пытаюсь присвоить новое свойство его объекту внутри функции socket.on, я не могу использовать свойство вне функции socket.on . Консоль показывает мне это —

 roomName
#undefined
  

Я хочу знать, как я могу использовать свойство и вне объекта.

 io.on("connection", function(socket) {
	socket.on("join_group", function(user, roomnum) {
		socket.userName = user;
		socket.selfRoom = roomnum;
		socket.join(roomnum);
		console.log(socket.selfRoom);
	});
    socket.on("msg", function() {
	console.log("#"   socket.selfRoom);
    });
});  

Ответ №1:

Я хочу знать, как я могу использовать свойство и вне объекта.

Вы устанавливаете свойство для внешнего объекта socket в функции обратного вызова для on события.

Но к моменту on вызова обработчика событий console.log("#" socket.selfRoom); оператор outside уже выполнен.

Пожалуйста, обратите внимание, что

  • Определение обработчика событий socket.on("join_group", function(user, roomnum) { не совпадает с вызовом этого обработчика событий (метода обратного вызова).

  • JavaScript является однопоточным и работает по модели цикла событий, поэтому при запуске события этот обработчик событий переходит в очередь цикла событий, которая будет выполнена после текущей задачи задача уже в очереди.

Комментарии:

1. Извините, я отредактировал свой вопрос. Пожалуйста, посмотрите. Я действительно хотел знать, как я могу добавить свойства к внешнему объекту изнутри другой функции, чтобы эти свойства не ограничивались областью действия функции.

2. @DhruvChadha оно не ограничивается областью действия функции, оно устанавливается только на тот же объект.

3. Тогда почему я получаю #undefined (пожалуйста, взгляните на отредактированный код)?

4. @DhruvChadha вывод будет зависеть от того, какое событие запускается первым. Можете ли вы попробовать сделать противоположный способ проверить свою теорию?