К тому времени, когда вы вызываете this
, это входит в область функции обратного вызова complete
.В этот момент this
ссылается на функцию обратного вызова, а не на класс.Или, зная jQuery, this
может указывать на элемент #element
.Вам нужно будет реструктурировать.Самый ленивый способ сделать это - создать новую переменную в методе класса, присвоить ей this
и использовать ее в функции.Я также использую let
здесь вместо var
, потому что мы хотим, чтобы эта переменная была ограничена областью блока (, что бы это ни значило )
class Foo
{
Bar(){
let self = this;
$("#element").animate({ width : "100%" }, {
duration : 1000,
complete : function(){
console.log("test");
self.doSomething();
}
});
}
doSomething()
{
// Do something
}
constructor(){
this.Bar();
}
}
var example = new Foo();
Вы также можете использовать функции стрелок иusing
ключевое слово или bind
штучка, но я не настолько хорош программистом, и вышеупомянутая концепция до сих пор работала у меня хорошо.