js - 'this' 在调用方法 'indirectly' 时未定义
js - 'this' is undefined when calling method 'indirectly'
我的目标是从 table 个函数中调用一个函数来概括命令处理(即间接)。不幸的是,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
变量没有帮助(我想也许 this
在 handlers
对象内易手)。间接调用函数时this
的作用域是什么?
this
的默认行为是 它在调用时引用函数作用域(见下文)。您可以通过使用 bind
(MDN) 或使用箭头函数语法强制 this
的值,lexically-scopes 您对 this
的引用到您定义的任何地方功能。这是我要进行的更改:
"dummy" : server.dummyCommandHandler.bind(this),
我的目标是从 table 个函数中调用一个函数来概括命令处理(即间接)。不幸的是,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
变量没有帮助(我想也许 this
在 handlers
对象内易手)。间接调用函数时this
的作用域是什么?
this
的默认行为是 它在调用时引用函数作用域(见下文)。您可以通过使用 bind
(MDN) 或使用箭头函数语法强制 this
的值,lexically-scopes 您对 this
的引用到您定义的任何地方功能。这是我要进行的更改:
"dummy" : server.dummyCommandHandler.bind(this),