const shape = {
radius: 10,
diameter() {
return this.radius * 2;
},
perimeter: () => 2 * Math.PI * this.radius
};
console.log(shape.diameter());
console.log(shape.perimeter());3 Réponses :
Ceci est un problème d'étendue - la variable de rayon n'est pas disponible à l'intérieur de la méthode du périmètre et est indéfinie. Changer la fonction sur une méthode régulière résout le problème.
p>
const shape = {
radius: 10,
diameter() {
return this.radius * 2;
},
perimeter() {
return 2 * Math.PI * this.radius
}
};
console.log(shape.diameter()); //gives 20
console.log(shape.perimeter()); // gives 62.83185307179586
Lorsqu'il est utilisé dans une fonction de flèche ( () => ... code>), la portée de ceci code> est la même portée que lorsque la fonction est définie. Dans ce cas, il est fenêtre code>.
Merci @soc - Cela signifie que pour avoir accès à la variable rayon - il aurait besoin d'être dans la portée globale et en dehors de l'objet de forme.
Selon la manière dont vous envisagez de l'utiliser, vous pouvez être mieux servi avec une classe p> code>. Dans l'exemple ci-dessous, ceci code> dans la fonction de flèche fait référence à l'instance Circle code>. class Circle {
constructor(radius) {
this.radius = radius;
}
diameter() {
return this.radius * 2;
}
perimeter = () => 2 * Math.PI * this.radius;
}
const shape = new Circle(10);
console.log(shape.diameter());
console.log(shape.perimeter());
Bonjour périmètre en fonction de la fonction de flèche non utilisée (() =>) p>
périmètre () { Retour 2 * math.pi * this.radius} p> blockQuote>
Est-ce que cela répond à votre question? sont «Fonctions de flèche» et «Fonctions» équivalente / échangeable?