javascript – .apply而不改变范围

前端之家收集整理的这篇文章主要介绍了javascript – .apply而不改变范围前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将 JavaScript .apply方法用于为Node.js编译的thrift的函数. 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]按预期返回值,但apply call [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方法,以使其行为与直接调用时的行为完全相同?

解决方法

将apply函数指向这样的相同函数应该保留原始范围.
client[req.params.command].apply(client,[console.log]);

猜你在找的JavaScript相关文章