gpt4 book ai didi

javascript - 在 JavaScript 闭包中使用 'this'

转载 作者:行者123 更新时间:2023-12-03 11:14:30 25 4
gpt4 key购买 nike

我正在用 JavaScript 构建一个应用程序。我正在尝试了解如何使用 this在 JavaScript 闭包中。目前,我有以下代码:

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

我当前正在执行execute通过 Jasmine 测试。

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打回来。不过,我还不确定。

谢谢!

最佳答案

您应该在外部作用域中创建一个 _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);
}
}
...

关于javascript - 在 JavaScript 闭包中使用 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27402643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com