quelles sont en réalité les méthodes getter et setter dans la définition de classe ES6? Sont-ils infact prototypes accessoires? par exemple:
class Person{
constructor(){};
get name(){
return 'jack';
}
set name(){
// ???
}
}
cela équivaut-il à Person.prototype.name = 'jack';
et une autre question, j'ai vu des exemples de setters qui utilisent l'accessoire de l'instance comme:
class Person{
constructor(){
this._name = 'jack';
};
get name(){
return this._name;
}
set name(val){
this._name = val;
}
}
je ne veux pas faire de cette façon, je veux quelque chose comme:
class Person{
constructor(){};
get name(){
return 'jack';
}
set name(val){
// like this
// name = val;
}
}
que pourrait-on faire?
Oui, cela peut être fait: supprimez simplement la syntaxe setter/getter et ajoutez une propriété à la classe lors de l'initialisation:
class Person{
constructor(name){
this.name = name;
}
}
La syntaxe getter/setter existe pour les propriétés devant être calculées en fonction d'autres propriétés, comme la propriété area
à partir du cercle d'une radius
donnée:
class Circle {
constructor (radius) {
this.radius = radius;
}
get area () {
return Math.PI * this.radius * this.radius;
}
set area (n) {
this.radius = Math.sqrt(n / Math.PI);
}
}
Ou obtenir le nom complet d'un objet Person
avec les propriétés firstName
et lastName
. Vous avez eu l'idée.
Selon MDN, la syntaxe get lie une propriété d'objet à une fonction qui sera appelée lors de la recherche de cette propriété.
Ici, vous retournez juste une chaîne 'jack' qui ne lie aucune propriété.
Fait intéressant, console.log (Person.prototype.name) enregistre la prise
Mais Person.hasOwnProperty (name) enregistre false
également une fois que nous avons créé une instance d’appel de personne, c’est-à-dire const x = new Person ();
console.log (x.name) -> cette erreur génère une erreur, impossible de lire la propriété x.name car x.hasOwnProperty (name) a la valeur false
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get