0

我有这个 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我想要的。

处理此案的最佳模式是什么?一个_self = this?在这种情况下,应该在哪里插入该行,我应该停止引用this并只使用它_self吗?

4

1 回答 1

2

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

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);});
};

在我看来,最好的做法是this尽可能地继续参考以明确您所指的内容,在调试时可能会错过重新分配使用的局部变量,从而很难找到错误。

于 2012-11-01T22:56:48.723 回答