admin管理员组

文章数量:1302902

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??

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??

Share Improve this question edited Sep 13, 2014 at 7:51 user663031 asked Sep 13, 2014 at 7:25 tire0011tire0011 1,0581 gold badge11 silver badges25 bronze badges 3
  • You want this.writeLine – elclanrs Commented Sep 13, 2014 at 7:27
  • for the first call it works but not for the second in the get – tire0011 Commented Sep 13, 2014 at 7:40
  • 1 Of course, because this is not what you think it is. You have to either cache it, bind it, or use fat arrow. – elclanrs Commented Sep 13, 2014 at 7:42
Add a ment  | 

1 Answer 1

Reset to default 7

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

本文标签: javascriptHow to call one method in an ES6 class from another oneStack Overflow