2016-06-29 9 views
6

Benim adım parametremi çalışan sınıfımda alamıyorum! Neden this is not undefined gibi hata alıyorum bilmiyorum! this geçerli nesne için geçerlidir! İsim parametremi nasıl çıkaracağım?Bu, javascript sınıfı yapıcısında tanımlanmamış bir hata mı?

class Person { 
    constructor(n, a) { 
     var p = this; 
     p.n = n; 
     p.a = a; 
     p.total = 0; 
     p.a.map(x => p.total += parseInt(x)); //get total salary  
    } 
    firstName() { 
     return this.n = "Min Min "; 
    } 
    displayMsg() { 
     return " and My yearly income is " + this.total; 
    } 
} 

class Employee extends Person { 
    constructor(name, age) { 
     this.name = name; 
    } 
    lastName() { 
     return this.name; 
    } 
    Show() { 
     return "My name is " + super.firstName() + this.lastName() + super.displayMsg(); 
    } 
} 
emp = new Employee("David", [123, 456, 754]); 
console.log(emp.Show()); 

Gerçek Çıktı

Uncaught ReferenceError: this is not defined 

Beklenen Çıktı

My name is Min Min David and My yearly income is 1333 
+0

Ben Firefox 48.0a2 olsun gerçek hata 'ReferenceError geçerli: | bu | Çalışan sınıfı oluşturucuda başlatılmamış olarak kullanılır. – Xufox

+0

Yinelenen sorunun cevabını gördüm ve test ettim! Ama '.map' işlevinde hata alın. –

+0

Şimdi sorun yok, cevabım altında sorumu çözdüm! Sadece yinelenen sorunun cevabının OP'imi çözmediğine işaret ediyorum. –

cevap

8

Sen çağrı size sınıf başlatmasını devam etmeden önce ilk super() kurucu gerekir:

class Employee extends Person { 
    constructor(name, age) { 
     super(name, age); 
     this.name = name; 
    } 

    ... 
} 

JSBin