Javascript ';这';丢失Node.js HTTP回调中的上下文
Javascript ';这';丢失Node.js HTTP回调中的上下文,javascript,node.js,scope,prototype,Javascript,Node.js,Scope,Prototype,self.test()不会在http.createServer()内部触发: 如果我将它移出http.createServer()它会工作。为什么会这样? 此存储在self中,这样就不会丢失上下文。我错过了什么? 如果需要,我可以提供额外的代码和更多的函数(self.init,等等) 更新 实例: new App({ port: 8000 }); 初始化: function App(options){ if (! (this instanceof arguments.call
self.test()
不会在http.createServer()内部触发:
如果我将它移出http.createServer()
它会工作。为什么会这样?
此
存储在self
中,这样就不会丢失上下文。我错过了什么?
如果需要,我可以提供额外的代码和更多的函数(self.init
,等等)
更新 实例:
new App({
port: 8000
});
初始化:
function App(options){
if (! (this instanceof arguments.callee)) {
return new arguments.callee(arguments);
}
var self = this;
self.settings = {
port : options.port
}
self.init();
};
App.prototype.init = function() {
var self = this;
self.server = self.createServer();
self.server.listen(self.settings.port);
};
req
只有在有主体时才会发出end
事件GET
请求不会发出它,但是POST
会发出它
此外,您应该调用将服务器绑定到套接字。您是如何向服务器发出请求的?这些功能根本无法实现或
。test
不是您想象的那样。而且,这个
永远不会失去作用域,因为它与开始时的作用域无关。此外,self
是一个正常变量,因此如果self
不起作用,那么说此
失去作用域是不准确的。它是抛出错误还是根本不运行?如果它没有运行,您是否在之后调用了app.listen()?你试过发出http请求吗?你试过把它传递到函数中吗?@Esailija,我的错。我指的是上下文,而不是范围。这已经被纠正了好吧,你发布的示例代码中没有任何错误,所以我猜你在其他地方或从示例中删除的代码中有一个bug。我在上面的评论中回答了这个问题。你能告诉我们你如何实例化应用程序
以及如何调用createServer
?例如,如果您忘记调用new
,它将不起作用。有关更多信息,请参阅。我认为这是createServer
函数内部的问题,与此
无关,我尝试了console.log(“test”)
,但它也不起作用。我试过你的代码,它对我有效<已正确调用代码>self.test()。我只添加了var http=require('http')代码>。您正在运行哪个版本的节点?
function App(options){
if (! (this instanceof arguments.callee)) {
return new arguments.callee(arguments);
}
var self = this;
self.settings = {
port : options.port
}
self.init();
};
App.prototype.init = function() {
var self = this;
self.server = self.createServer();
self.server.listen(self.settings.port);
};