2017-07-18 3 views
1

Node.jsとJavaScriptを使用しています。私はクラスの例を持っています:これをクラス内のforEachなどの内部で呼び出すにはどうすればいいですか?

class Student { 
    constructor(name, age) { 
     this.name = name; 
     this.age = age; 
    } 
    getStudentName() { 
     return this.name; 
    } 
    getStudentAge() { 
     return this.age; 
    } 
    exampleFunction() { 
     let array = ['aaa', 'bbb', 'ccc', 'ddd']; 
     array.forEach(function(i, val) { 
      console.log(i, val); 
      console.log(this.getStudentName()); // ERROR! 
     }) 
    } 
} 

var student = new Student("Joe", 20, 1); 
console.log(student.getStudentName()); 
student.exampleFunction(); 

このクラスのforEach内の関数からメソッドを参照するにはどうすればよいですか?

私はTypeError例外があります。

TypeError: Cannot read property 'getStudentName' of undefined

+0

太い矢印の機能FTW! 'array.forEach((i、val)=> {' – epascarello

答えて

0

これはforループ内で変更されます。あなたはそれを強制的に定義しなければなりません。それを行うにはいくつかの方法があります。ここにあるのは

class Student { 
    constructor(name, age) { 
     this.name = name; 
     this.age = age; 

    } 
    getStudentName() { 
     return this.name; 
    } 
    getStudentAge() { 
     return this.age; 
    } 
    exampleFunction() { 
     let array = ['aaa', 'bbb', 'ccc', 'ddd']; 
     array.forEach(function(i, val) { 
      console.log(i, val); 
      console.log(this.getStudentName()); // ERROR! 
     }.bind(this)) 
    } 
} 
0

あなたはforEachthisの参照を渡す必要があります。

array.forEach(function(i, val) { 
    console.log(i, val); 
    console.log(this.getStudentName()); // Now Works! 
}, this); 
関連する問題