我的目标是从函数表中调用一个函数来概括命令处理(即间接)。不幸的是,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" });
Run Code Online (Sandbox Code Playgroud)
这是我第一次使用 javascript,我以为我已经确定了范围,但显然它比看起来更复杂。this使用server变量别名服务器没有帮助(我认为可能this在handlers对象内易手)。this间接调用函数时的作用域是什么?
的默认行为this是它在调用时引用函数范围(见下文)。您可以this通过使用bind( MDN ) 或使用箭头函数语法来强制使用 的值,该语法将您的引用范围this限定在您定义函数的任何位置。这是我要做的改变:
"dummy" : server.dummyCommandHandler.bind(this),