Node.js 用にコンパイルされた thrift の関数に JavaScript の .apply メソッドを使用したいと考えています。thrift .js ファイルには、次のようなコードがあります。
...
var NimbusClient = exports.Client = function(output, pClass) {
this.output = output;
this.pClass = pClass;
this.seqid = 0;
this._reqs = {};
};
NimbusClient.prototype = {};
NimbusClient.prototype.getClusterInfo = function(callback) {
this.seqid += 1; // line where error is thrown [0]
this._reqs[this.seqid] = callback;
this.send_getClusterInfo();
};
...
私のサーバーファイルは次のようになります。
var thrift = require('thrift')
, nimbus = require('./Nimbus')
, connection = thrift.createConnection('127.0.0.1', 6627)
, client = thrift.createClient(nimbus, connection)
, ... // server initiation etc
app.get('/nimbus/:command', function(req, res, next) {
client[req.params.command](console.log); // direct call [1]
client[req.params.command].apply(this, [console.log]); // apply call [2]
});
...
直接呼び出し [1] は期待どおりに値を返しますが、適用呼び出し [2] は常に行 [0] で次のエラーを生成します。
TypeError: Cannot set property 'NaN' of undefined
[2] で他のいくつかのスコープ パラメータを試しました: null
、nimbus
、nimbus.Client
、nimbus.Client.prototype
、nimbus.Client.prototype[req.params.command]
およびclient[req.params.command]
、すべて成功しませんでした。
呼び出される関数の実際のスコープを変更せずに apply メソッドを呼び出して、直接呼び出した場合とまったく同じように動作させるにはどうすればよいですか?