我的目标是从函数表中调用函数来概括命令处理(即间接)。很遗憾,this
isundefined
当这样称呼时。
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
变量没有帮助(我想也许this
内易手handlers
目的)。范围是什么this
什么时候间接调用该函数?
默认行为为this
是 it 指的是调用时的函数作用域(见下文)。您可以强制的值this
通过使用bind
(MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)或使用箭头函数语法,它按词法范围限制您的引用this
到您定义该函数的任何位置。这是我要做的改变:
"dummy" : server.dummyCommandHandler.bind(this),
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)