我正在使用JavaScript构建应用。我试图了解如何在JavaScript闭包中使用this
。目前,我有以下代码:
var ExternalResource = require('ExternalResource');
function MyObject() {
}
MyObject.prototype.state = "Closed";
MyObject.prototype.execute = function(options, callback) {
if (!options) {
if (callback) {
callback(-1);
}
return;
}
try {
this.state = 'Connecting';
var client = new ExternalResource.Client();
client.connect(function(err) {
if (err) {
this.state = 'Failed';
if (callback) {
callback(-1, err);
}
} else {
this.state = 'Good';
if (callback) {
callback(1);
}
}
});
} catch (ex) {
if (callback) {
callback(-1, ex);
}
}
};
我目前正在通过Jasmine测试执行execute
。
it(' - Connect to a local instance', function(done) {
var myObject = new MyObject();
myObject.execute({}, function() {
expect(myObject.state).toBe('Good');
});
});
执行此测试时,我看到以下错误:
Expected 'Connecting' to be 'Good'.
我确信它与在this.state
回调中使用connect
有关。但是,我不确定。
谢谢!
答案 0 :(得分:1)
您应该在外部作用域中创建_self
引用,以便在内部作用域中正确使用它
...
var _self = this;
client.connect(function(err) {
if (err) {
_self.state = 'Failed';
if (callback) {
callback(-1, err);
}
} else {
_self.state = 'Good';
if (callback) {
callback(1);
}
}
...