tire0011 tire0011 - 3 months ago 11
Javascript Question

How to call one method in an ES6 class from another one?

if I have a javascript ES6 class like this:

import $ from "jquery";

export class test {

constructor() {
this.es6 = 'yay';
}

writeLine(text){
console.log(text);
}

getTestData(){
writeLine('writeLine call'); // <-- can not call writeLine ??
$.get('/test', function(data){
console.log(data);
console.log(data.data);
this.es6 = data.data;
debugger
writeLine(data.data);
});
}
}


From another file I import the class and call getTestData

System.import('app/classDefinition')
.then(function(classDefinitionModul) {
var test = new classDefinitionModul.test();
console.log(test.es6);
test.getTestData();
})


How can I call the method
writeLine
??

Answer

This doesn't have anything to do with es6. In the ajax callback, this doesn't refer to the object anymore.

getTestData () {

    // this isn't java (see what I did there)
    this.writeLine('writeLine call');

    var _this = this;
    $.get('/test', function (resp) {
        _this.writeLine(resp.data);
    });

    // or
    $.get('/test', function (resp) {
        this.writeLine(resp.data);
    }.bind(this));

    // or
    $.get('/test', resp => this.writeLine(resp.data))
}