Пожалуйста, объясните мне, как сеттер работает внутри класса в JavaScript

Цель: используйте ключевое слово class для создания класса Thermostat. Конструктор принимает температуру по Фаренгейту. В классе создайте геттер для получения температуры в градусах Цельсия и сеттер для установки температуры в градусах Цельсия.

Вот мой код:

class Thermostat {
  constructor(fahrenheit){
    this.fahrenheit = fahrenheit;
  }

  get temperature(){
    const inCelcius = 5/9 * (this.fahrenheit - 32) ;
    return inCelcius;

  }

  set temperature (temperatureInCelcius){
    this.fahrenheit = temperatureInCelcius;
  }

}

const thermos = new Thermostat(76); // Setting in Fahrenheit scale
let temp = thermos.temperature; // should show 24.44 in Celsius
console.info(temp);
thermos.temperature = 26;
temp = thermos.temperature; // should show 26 in Celsius but right now showing -3.333
console.info(temp);

Я знаю, что правильное решение — заменить this.fahrenheit = temperatureInCelcius; на this.fahrenheit = (celsius * 9.0) / 5 + 32;

Но я не понимаю, почему. Мне сказали, что в моем коде отсутствует преобразование.

Мои вопросы:

  1. Зачем нужно переводить градусы Фаренгейта в градусы Цельсия?
  2. Что именно происходит в этой строке? thermos.temperature = 26; Насколько я понимаю, когда компилятор видит эту строку, он вызывает эту строку внутри конструктора.
set temperature (temperatureInCelcius){
    this.fahrenheit = temperatureInCelcius;
  }

а затем введите 26 в аргумент (temperatureInCelcius), затем установите значение свойства this.fahrenheit равным 26.

Просто хочу какое-то объяснение, потому что мне кажется, что я что-то упускаю. Был бы очень признателен за вашу помощь! <3

Вы конвертируете фаренгейты -> градусы Цельсия при чтении, поэтому вам нужно конвертировать градусы Цельсия -> фаренгейты при записи. 2: My understanding is that Это не конструктор, иначе все правильно. I know the correct solution is to change this.fahrenheit = temperatureInCelcius; Да, потому что вы сохраняете цельсия в своей переменной, которая должна содержать значение фаренгейт.

tkausl 19.03.2022 07:07
this.fahrenheit = temperatureInCelcius показывает плохой выбор имен переменных. Это означает, что входящая температура (в мировых единицах) преобразуется в этот момент в единицы свободы, что не так.
Bravo 19.03.2022 07:09

@tkausl Большое спасибо за объяснение. Можете ли вы рассказать мне больше о части чтения и письма?

Sugarpearl 19.03.2022 07:11

Я думал, что сеттер просто удалит текущее значение this.fahrenheit и перезапишет его на 26? Разве это не так?

Sugarpearl 19.03.2022 07:15

правильно ... так что теперь ваше значение по Фаренгейту - это число 26 - и когда вы gettemperature оно преобразует 26 градусов по Фаренгейту в соответствующие градусы Цельсия

Bravo 19.03.2022 07:18

вам нужно преобразовать входящее значение celcius в fahrenheit, прежде чем сохранить его в this.fahrenheit

Bravo 19.03.2022 07:22

Не знаю, как я помог. Я думаю, вы знали, что должны были это сделать, вы так сказали в вопросе, вам нужно было знать, почему? Почему-то мой комментарий заставил что-то щелкнуть :p

Bravo 19.03.2022 07:26

@bravo Я не учел тот факт, что когда вы получаете температуру после ее установки, она снова проходит преобразование. Когда вы сказали, что «когда вы получаете температуру, она преобразует 26 градусов по Фаренгейту в соответствующие градусы Цельсия», это было для меня именно тогда! :D Между прочим, ты стал отличным учителем.

Sugarpearl 19.03.2022 07:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы делаете temp = thermos.temperature;, вызывается get temperature() и для thermos.temperature = 26; вызывается set temperature().

// thermos.temperature = 76
const thermos = new Thermostat(76);

// this calls get temperature() and return 24.44
// 5/9 * (76 - 32) = 24.44
let temp = thermos.temperature;

console.info(temp); // 24.44

// this calls set temperature() and sets thermos.temperature = 26
thermos.temperature = 26;

// this calls get temperature() and return -3.333
// 5/9 * (26 - 32) = -3.333
temp = thermos.temperature;

console.info(temp); // -3.33

Другие вопросы по теме