2

私のアプリでは、を使用して渡さsocketれますthisbindcall

socket.on( 'handle', someFunc.bind(socket) );

function someFunc() {
  var socket = this;
  ...
  anotherFunc.call( socket, 'abc', ... );
}

の代わりに- 忘れ - を使用してthisいることを確認したいと思います。socketfunc(...)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

問題の特定の問題を解決するには、thisnull でないかどうかを確認することをお勧めします。

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

呼び出しのアサートは失敗し、呼び出しsomeFunc();のみが渡されます (が null でない限り)。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 に答える