在node.js / socket.io中,如何判断某个对象是否是套接字的一个实例?
在我的应用程序socket
传递,因为this
使用bind
和call
socket.on( 'handle', someFunc.bind(socket) ); function someFunc() { var socket = this; ... anotherFunc.call( socket, 'abc', ... ); }
我希望确保this
确实是一个socket
– 遗忘 – 使用func(...)
而不是func.call(socket,...)
。
function someFunc() { var socket = this; assert.ok( /* ensure this is instanceof a socket */ ); ... }
我如何做出断言?
有我可以使用的io = require('socket.io')
内的一些socket
吗?
为了解决特定的问题,最好检查一下是否为空:
function someFunc() { var socket = this; assert.ok(socket); ... }
assert会失败someFunc();
调用,只会传递给someFunc.bind(socket)();
和someFunc.call(socket);
调用(只要socket
不为空)。
如Bergibuild议的那样,依靠实现细节,如果下一个Node.js版本具有不同的实现,则会导致应用程序不可用; 它似乎不是公共API的一部分。
从我在源代码中读到的 ,它返回一个Manager
实例。 这个检查应该工作:
var io = require('socket.io'); var socket = io.listen(...); socket instanceof io.Manager; // true