2017-09-05 10 views
-1

サブクラスでスーパー(資格)を使用すると、スーパークラスで定義されているときにReferenceErrorがスローされるのはなぜですか?

class SchoolEmployee { 
 
    constructor(name, qualifications) { 
 
    this._name = name; 
 
    this._qualifications = qualifications; 
 
    this._holidaysLeft = 21; 
 
    } 
 

 
    get name() { 
 
    return this._name; 
 
    } 
 

 
    get qualifications() { 
 
    return this._qualifications; 
 
    } 
 

 
    get holidaysLeft() { 
 
    return this._holidaysLeft; 
 
    } 
 

 
    takeHolidays(days) { 
 
    this._holidaysLeft -= days; 
 
    } 
 
} 
 

 
class Teacher extends SchoolEmployee { 
 
    constructor(name, qualifications, subject) { 
 
    super(name); 
 
    super(qualifications); //THIS IS THE ERROR 
 
    this._subject = subject; 
 
    } 
 

 
    get name() { 
 
    return this._name; 
 
    } 
 

 
    get qualifications() { 
 
    return this._qualifications; 
 
    } 
 

 
    get subject() { 
 
    return this._subject; 
 
    } 
 
} 
 

 
let John = new Teacher('John', ['Maths', 'Physics'], 'Maths');

SchoolEmployeeは、私は '資格' であるものを定義しているスーパークラスです。私の知るところでは、スーパー(資格)を書くことは、以前定義されていたスーパークラスのコンストラクタを呼び出します。現在、私はJavascriptを学習しており、何が問題になったのか分かりません。誰か助けてくれますか?

+0

正確なエラーメッセージとは何ですか? – Quentin

+0

'ReferenceError:これは定義されていません 新しい教師(D:\ MAIN \ COding \ javascript \ classes.js:28:5) at Object。 (module.js:579:)で (D:¥MAIN¥COTING¥javascript¥classes.js:45:12) をModule._compile(module.js:570:32) にあります。 10) Module.load(module.jsにおいて:487:32) tryModuleLoad(module.jsにおいて:446:12)Function.Module._load(module.jsで :438:3)Module.runMainで (起動時(bootstrap_node.js:149:9)に を実行したとき(bootstrap_node.js:389:7) – hu1k909

答えて

1

on mdnを検索すると、super()は親クラスのコンストラクタを呼び出し、それを2回呼び出しています。おそらく必要なのは

class Teacher extends SchoolEmployee { 
    constructor(name, qualifications, subject) { 
     super(name, qualifications); 
     this._subject = subject; 
    } 
} 
0

SchoolEmployeeコンストラクタでは、1つのパラメータでスーパーと呼ばれる2つのパラメータが必要です。試してください:

super(name, qualifications); 
0

明らかにSuper constructor may only be called onceと表示されます。 Superがコンストラクタを呼び出し、親コンストラクタがname, qualificationsの両方を受け入れるときに、superにそれらを渡します。

class SchoolEmployee { 
 
    constructor (name, qualifications) { 
 
    this._name = name; 
 
    this._qualifications = qualifications; 
 
    this._holidaysLeft = 21; 
 
    } 
 

 
    get name() { 
 
    return this._name; 
 
    } 
 

 
    get qualifications() { 
 
    return this._qualifications; 
 
    } 
 

 
    get holidaysLeft() { 
 
    return this._holidaysLeft; 
 
    } 
 

 
    takeHolidays(days) { 
 
    this._holidaysLeft -= days; 
 
    } 
 
} 
 

 
class Teacher extends SchoolEmployee { 
 
    constructor (name, qualifications, subject) { 
 
    super(name, qualifications); 
 
    this._subject = subject; 
 
    } 
 

 
    get name() { 
 
    return this._name; 
 
    } 
 

 
    get qualifications() { 
 
    return this._qualifications; 
 
    } 
 

 
    get subject() { 
 
    return this._subject; 
 
    } 
 
} 
 

 
let John = new Teacher('John',['Maths', 'Physics'],'Maths');

関連する問題