无法从函数范围向外部对象添加属性?

时间:2016-10-18 14:22:07

标签: 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 个答案:

答案 0 :(得分:1)

  

我想知道如何在对象外使用该属性。

您正在将回调函数中的属性设置为外部对象socketon事件。

但是在调用事件处理程序on时,外部console.log("#" + socket.selfRoom);语句已经执行。

请注意

  • 定义事件处理程序socket.on("join_group", function(user, roomnum) { 与调用此事件处理程序(回调方法)不一样

  • JavaScript是单线程的,可用于事件循环模型,因此当事件被触发时,此事件处理程序已转到事件循环队列这将在当前任务+任务已在队列之后执行。