应用程序不改变范围

我想使用JavaScript .apply方法来编译Node.js节点的函数。 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]中尝试了几个其他范围参数: nullnimbusnimbus.Clientnimbus.Client.prototypenimbus.Client.prototype[req.params.command]client[req.params.command] ,都没有成功。

如何在不改变被调用函数的实际范围的情况下调用apply方法,使其与直接调用时的行为完全相同?

apply函数指向这样的函数应保留原始范围。

 client[req.params.command].apply(client, [console.log]);