【发布时间】:2020-07-15 15:49:46
【问题描述】:
我正在使用带有 express 和 socket.io 的 javascript (p5.js) 和 node.js。
这是我当前代码的一部分,我认为问题出在:
for (var i = 0; i < 3; i ++){
for (var j = 0; j < 3; j ++){
for (var k = 0; k < 3; k ++){
for (var l = 0; l < 3; l ++){
socket.emit('grid', grid[i][j][k][l]);
}
}
}
}
socket.on('grid', test);
}
function test(gridElement){
gridElement.show();
console.log('showing');
}
这个想法是有一个 4 维“网格”,网格中的每个元素都是一个 CELL。每个单元格都有以下关联的属性:
function Cell(x, y, w, val){
this.x = x;
this.y = y;
this.w = w;
this.revealed = true;
this.val = round(val);
}
Cell.prototype.show = function(){
rect(this.x, this.y, this.w, this.w);
text(this.val, this.x + this.w/2, this.y + this.w/2);
}
正如它所说,每个单元格都有一个“显示”功能来显示单元格。这通常有效。
问题是,在我从服务器发出元素并尝试运行后:
gridElement.show();
我收到一条错误消息,提示“gridElement.show 不是函数”
关于什么是错的以及如何解决它的任何想法?如果需要,我有服务器代码。
【问题讨论】:
-
这能回答你的问题吗? Socket.io how to send JavaScript object
-
我的猜测是。
emit()在后台使用JSON.stringify,因此一旦解析回来,您在单元实例中拥有的任何函数都不会被保留。也许考虑在你的 Cell 类上创建一个.fromData()方法 -
@BENARDPatrick 我不这么认为,因为我已经在我的服务器代码中使用了 socket.broadcast.emit()...
-
@NickParsons 我对 .fromData() 一点也不熟悉,请您详细说明一下吗?
标签: javascript node.js express websocket socket.io