js - 'this'在调用方法'间接'时是未定义的

时间:2017-02-16 23:39:53

标签: javascript rhino

我的目标是从函数表调用函数来概括命令处理(即间接)。不幸的是,this被称为undefined

function Server() {
    this.sessions = {};

    server = this;
    this.handlers = {
        "dummy" : server.dummyCommandHandler,
    };
}

Server.prototype.dummyCommandHandler = function() {
    print (this.sessions);
}

Server.prototype.run = function ( command ) {
    print (this.sessions); // [Object object]
    this.handlers[command.name](); // prints 'undefined'
    this.dummyCommandHandler(); // prints '[Object object]'
}

s = new Server();
s.run({ "name": "dummy" });

这是我第一次使用javascript,我认为我确定了范围,但显然它比看起来更复杂。使用this变量的别名服务器server没有帮助(我想也许thishandlers对象中转手。间接调用函数时this的范围是什么?

1 个答案:

答案 0 :(得分:4)

this的默认行为是它指的是调用时的函数范围(见下文)。您可以使用thisMDN)或使用箭头函数语法强制bind的值,该函数语法将您对this的引用的词法范围限定到您定义函数的任何位置。这是我要做的改变:

"dummy" : server.dummyCommandHandler.bind(this),