Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript、嵌套eventhandler和_Javascript_Node.js_This - Fatal编程技术网

Javascript、嵌套eventhandler和

Javascript、嵌套eventhandler和,javascript,node.js,this,Javascript,Node.js,This,我有一个javascript类: var Server = (function () { var spawn = require('child_process').spawn; function Server(serverDefinition) { this.definition = serverDefinition; this.status = false; } Server.prototype.start = function () { this.process

我有一个javascript类:

var Server = (function () {

var spawn = require('child_process').spawn;

function Server(serverDefinition) {
    this.definition = serverDefinition;
    this.status = false;
}

Server.prototype.start = function () {
    this.process = spawn('java', ['-jar', this.definition.jarfile]);
    this.status = true;

    this.process.on('exit', function(code, signal){
        this.status = false;
        console.log('Server stopped: code=' + code + ', signal=' + signal);
    });

    this.process.stdout.on('data', function(data){ console.log('stdout: ' + data);});
    this.process.stderr.on('data', function(data){ console.log('stderr: ' + data);});
};

return Server;
})()

我的问题是
this
内部的
this.process.on('exit',…)
指的是
process
,而不是我希望的
Server


处理这个案件的最佳模式是什么?A
\u self=this
?在这种情况下,应该在哪里插入该行,我是否应该停止引用
this
,而只使用
\u self

您可以创建一个局部变量,其中包含对函数作用域中的
this
的引用,这将起作用,因为在JavaScript中,变量的作用域由其在源代码中的位置定义,嵌套函数可以访问其外部作用域中声明的变量。[]


在我看来,最好的做法是不断引用
如果有可能弄清楚您所引用的内容,在调试过程中可能会错过对所用局部变量的重新赋值,从而难以找到错误。

similiar+1。如果你坚持使用这种模式,其他人很快就会学会寻找lcoal作业。我还喜欢为实例使用构造函数名称(服务器->服务器),因此很明显,它就是实例(一旦你知道了模式),所以
Server.process=…
Server.status=…
加强了方案。额外问题:我已经按照你的建议更改了代码,并且它不再在流程对象上创建新的状态属性。但是它也不会改变正确的状态属性。我得到了log语句,但是
这个.status
,或者
服务状态
,仍然是
true
。还有什么不对的吗?我还试图清除exit事件中的process属性,但这导致了很大的麻烦……额外的答案是:我将
serv
变量放在start函数之外。我必须说我很难理解这个。。。(双关语无意…)你当时把它放在哪里了?如果是全局值,则无论何时启动新服务器,都将覆盖当前值。
Server.prototype.start = function () {
    var serv = this; // Reference to local object for use in inner-functions

    this.process = spawn('java', ['-jar', this.definition.jarfile]);
    this.status = true;

    this.process.on('exit', function(code, signal){
        serv.status = false;
        console.log('Server stopped: code=' + code + ', signal=' + signal);
    });

    this.process.stdout.on('data', function(data){ console.log('stdout: ' + data);});
    this.process.stderr.on('data', function(data){ console.log('stderr: ' + data);});
};