freeCodeCamp/curriculum/challenges/russian/02-javascript-algorithms-an.../es6/use-getters-and-setters-to-...

4.9 KiB
Raw Blame History

id title challengeType forumTopicId localeTitle
587d7b8c367417b2b2512b54 Use getters and setters to Control Access to an Object 1 301220 Использовать геттеры и сеттеры для контроля доступа к объекту

Description

Вы можете получить значения от объекта и установить значение свойства внутри объекта. Они классически называются геттерами и сеттерами . Функции Getter предназначены для простого возврата (получения) значения частной переменной объекта пользователю без прямого доступа пользователя к частной переменной. Функции Setter предназначены для изменения (установки) значения частной переменной объекта на основе значения, переданного в функцию setter. Это изменение может включать вычисления или даже полностью перезаписать предыдущее значение.
учебник {
конструктор (автор) {
this._author = author;
}
// getter
get writer () {
return this._author;
}
// setter
set writer (updatedAuthor) {
this._author = updatedAuthor;
}
}
const lol = new Book ('anonymous');
console.log (lol.writer); // анонимный
lol.writer = 'wut';
console.log (lol.writer); // wut
Обратите внимание на синтаксис, который мы используем, чтобы вызвать getter и setter - как будто они не являются даже функциями. Геттеры и сеттеры важны, потому что они скрывают внутренние детали реализации.

Instructions

Используйте ключевое слово class для создания класса термостата. Конструктор принимает температуру Фаренгейта. Теперь создайте getter и setter в классе, чтобы получить температуру в масштабе Цельсия. Помните, что C = 5/9 * (F - 32) и F = C * 9.0 / 5 + 32 , где F - значение температуры в шкале Фаренгейта, а C - значение той же температуры в шкале Цельсия. Примечание. Когда вы выполните это, вы будете отслеживать температуру внутри класса в одном масштабе - либо по Фаренгейту, либо по Цельсию. Это сила геттера или сеттера - вы создаете API для другого пользователя, который получит правильный результат, независимо от того, какой из них вы отслеживаете. Другими словами, вы абстрагируете детали реализации от потребителя.

Tests

tests:
  - text: <code>Thermostat</code> should be a <code>class</code> with a defined <code>constructor</code> method.
    testString: assert(typeof Thermostat === 'function' && typeof Thermostat.constructor === 'function');
  - text: <code>class</code> keyword should be used.
    testString: assert(code.match(/class/g));
  - text: <code>Thermostat</code> should be able to be instantiated.
    testString: assert((() => {const t = new Thermostat(32);return typeof t === 'object' && t.temperature === 0;})());

Challenge Seed

/* Alter code below this line */

/* Alter code above this line */

const thermos = new Thermostat(76); // setting in Fahrenheit scale
let temp = thermos.temperature; // 24.44 in C
thermos.temperature = 26;
temp = thermos.temperature; // 26 in C

Solution

/* Alter code below this line */
class Thermostat {
  constructor(fahrenheit) {
    this._tempInCelsius = 5/9 * (fahrenheit - 32);
  }
  get temperature(){
    return this._tempInCelsius;
  }
  set temperature(newTemp){
    this._tempInCelsius = newTemp;
  }
}
/* Alter code above this line */

const thermos = new Thermostat(76); // setting in Fahrenheit scale
let temp = thermos.temperature; // 24.44 in C
thermos.temperature = 26;
temp = thermos.temperature; // 26 in C