2

在我的应用程序socket中传递为thisusingbindcall

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 */ );
  ...
}

我如何做出断言?

socket里面有没有io = require('socket.io')我可以用的?

4

2 回答 2

1

要解决有问题的具体问题,最好检查是否this不为空:

function someFunc() {
  var socket = this;
  assert.ok(socket);
  ...
}

断言someFunc();调用失败,只会传递someFunc.bind(socket)();someFunc.call(socket);调用(只要socket不为空)。

正如 Bergi 所建议的那样,如果下一个 Node.js 版本具有不同的实现,那么依赖实现细节将使您的应用程序无法使用;它似乎不是公共 API 的一部分。

于 2012-08-03T05:37:17.043 回答
0

从我在源代码中读到的内容,它返回一个Manager实例。此检查应该有效:

var io = require('socket.io');
var socket = io.listen(...);

socket instanceof io.Manager; // true
于 2012-08-03T05:21:55.473 回答