Javascript js-';这';调用方法时未定义';间接地';
我的目标是从函数表中调用一个函数来概括命令处理(即间接地)。不幸的是,Javascript js-';这';调用方法时未定义';间接地';,javascript,rhino,Javascript,Rhino,我的目标是从函数表中调用一个函数来概括命令处理(即间接地)。不幸的是,这个在这样调用时是未定义的 function Server() { this.sessions = {}; server = this; this.handlers = { "dummy" : server.dummyCommandHandler, }; } Server.prototype.dummyCommandHandler = function() { pri
这个
在这样调用时是未定义的
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,我认为我已经确定了范围,但显然它比看起来更复杂。使用
Server
变量对服务器的this
进行别名处理没有任何帮助(我想可能this
会在处理程序
对象中进行更改)。当函数被间接调用时,此
的作用域是什么?此的默认行为是它在调用时引用函数作用域(见下文)。您可以通过使用bind
()或使用箭头函数语法强制执行this
的值,箭头函数语法将对this
的引用限定在定义函数的任何位置。这就是我要做的改变:
“dummy”:server.dummyCommandHandler.bind(此),
我看到的第一个问题~server=this
bad,var server=this
goodthis.handlers[command.name].bind(this)()代码>您的测试环境是什么?我把它复制并粘贴到我浏览器的控制台上,它看起来像预期的那样工作?@Phil啊,感谢Python的帮助……这不会影响这个问题though@hlfrmn或者在构造函数中~dummy:this.dummyCommandHandler.bind(this)
“this…引用调用时的函数范围”不正确。函数的作用域与作用域无关,它是通过调用或使用bind来设置的(或者从词汇上说是箭头函数,但它们不是OP的一部分)。请参阅。@BihnKim“找不到函数绑定”。Rhino JS似乎不支持这一点,unfortunately@MzyBwy-还有一个。另外,我认为您不再需要“server”变量了。应该能够做到:“dummy”:this.dummyCommandHandler.bind(this),