Ich bin ziemlich neu zu es6
. Unten ist meine einfache Student
Klasse mit einem Konstruktor, der 2 Argumente akzeptiert. Ich gebe Standardwerte durch Aufrufen von Funktion in der Konstruktorsignatur selbst, wenn die Argumente nicht übergeben werden.ES6-Typ Fehler beim Zuweisen von Standardwerten im Konstruktor
class Student {
defaultRno =() => -1;
defaultName =() => "unknown";
/**
* The default constructor
*/
constructor(regNo = this.defaultRno(), name = this.defaultName()) {
this.regNo = regNo;
this.name = name;
}
setRegNo = (rno = this.defaultRno()) => this.regNo = rno;
setName = (name = this.defaultName()) => this.name = name;
displayConsole =() => console.log(`Reg.No# ${this.regNo}\nName: ${this.name}`);
}
// create student object
var stu = new Student();
stu.displayConsole();
Dies führt mit folgenden Fehler:
constructor(regNo = -1, name = 'unknown') {
this.regNo = regNo;
this.name = name;
}
UPDATE: Auf die gleiche Weise zu initiieren
index.js:9Uncaught TypeError: this.defaultRno is not a function
at new Student (index.js:9)
at Object.<anonymous> (index.js:21)
at __webpack_require__ (bootstrap f01272b…:555)
Wenn ich den Konstruktor wie unten ändern, wird der Fehler nicht gesehen Standardwerte funktionieren mit Funktion. Überprüfen Sie setRegNo
und setName
oben. Ich habe beobachtet, dass es nicht mit dem Konstruktor funktioniert.
Zu der Zeit werden die Parameter an den Konstruktor ausgewertet werden, und Standardwerte angewendet wird, wird das Objekt nicht vollständig aufgebaut ist, und immer noch fehlt Methoden wie 'defaultRno'. Gibt es einen Grund, warum man nicht einfach 'constructor (regNo = -1, name =" unknown ")' 'schreiben kann? –
Das ist nicht ES6. Sie verwenden ein experimentelles Transpiler-Plugin und Sie verstehen nicht, was die Klassenfeld-Syntax tut. – Bergi
Pfeilfunktionen in einem Klassenkörper funktionieren nicht so, wie Sie möchten. Sie können jedoch Kurzschreibweise-Deklarationen wie 'setRegNo() {}' verwenden. – Marty