Ребят, привет.
Делал задание.
const shape = {
radius: 10,
diameter() {
return this.radius * 2;
},
perimeter: () => 2 * Math.PI * this.radius
};
shape.diameter();
shape.perimeter();
// Варинаты ответов:
// A: 20 и 62.83185307179586
// B: 20 и NaN
// C: 20 и 63
// D: NaN и 63
Всё вроде понятно. Ответ:
Заметь, что diameter это обычная функция, в то время как perimeter это стрелочная функция.
У стрелочных функций значение this указывает на окружающую область видимости, в отличие от обычных функций! Это значит, что при вызове perimeter значение this у этой функции указывает не на объект shape, а на внешнюю область видимости (например, window).
У этого объекта нет ключа radius, поэтому возвращается undefined.
И мне захотелось сымитировать эту внешнюю область видимости.
В итоге код стал таким:
var o = {
radius: 10,
shape: {
radius: 10,
diameter() {
return this.radius * 2;
},
perimeter: () => 2 * Math.PI * this.radius
}
}
o.shape.diameter();
o.shape.perimeter();
но всё равно не могу получить 20; 62...
что не так?