Лос Getter y Соседниты Llevan Un Buen Tiempo Con Nosotros (SON UNA CARACTERZICE DE ES5) Y SON LA BASE DE LA REACTIVEDAD EN ALGUNAS LIBERíAS COMO POLYMER O Vue Отказ CuAndo Nos Toca Usarlos Sin Embargo Suelen Aparecer Dudas. ¿ Cuándo Y Por Qué Usar розетки y Соседниты ( Свойства доступа ) en lugar de Свойства данных ? EN ESTE POST VEMOS ALGUNOS CASOS Y EJEMPLOS de Uso.
Invocan Funciones
ЭльСо де Аксессуары Свойства y Свойства данных ES IGUAL CUANDO LAS CONSULTAMOS O ETTERECEMOS, SIN EMBARGO LAS Primeras Invocan Funciones EN EL PRECESO: EL Геттер CuAndo Las Consultamos y El Сеттер CuAndo Las stateecemos. ESTO NOS помогает Hacer Tareas Adianices Como Validaciones , Cálculos ( Propiedades Computadas ) О актуализация Отказ
Teniendo en cuenta este Динамизмо y que podemos utilizar solo uno de los dos métodos (Normoldemente Solo Get
), Подемос enumerar Algunos Casos Claros de Uso .
Пропидал retonly
Пропорционер Соло Горттер Пара Уна Недвижимость Evita Que SE PueDa Ettinger SU Valor Y La Hace Por Lo Tanto de Solo Lectura. Asignar Un Valor No Underrá Efecto O SE Productirá Ошибка ESTAMOS E ASTAMOS EN MODO ESTRICTO.
const player = { lives: 5, get canPlay() { return this.lives > 0; } }; player.canPlay = false; // sin efecto o con error: TypeError: Cannot set property canPlay of #
Пропидады вычисления
Подемос Утилизар Лос Getter Para ictecer El Valor de Una Недвижимость EN Función de Otras. El Ejemplo Usado en todos los artículos sobre Getter y Соседниты es este, y yo Нет VOY SER MENOS:
const person = { firstName: 'John', lastName: 'Doe', get fullName() { return `${this.firstName} ${this.lastName}`; } }; person.fullName; // John Doe
CADA VEZ QUE CONSULTEMOS человек.fullname
Se ejecutará el Геттер y nos devolverá el доблесть актуализатора Partir de Las Otras dos свойства Отказ
Valhaciones.
Эль Сеттер Actea Un Solo Parámetro: El Valor Que Daremos A a La Недвижимость Отказ Подемос Утилизар Лос Соседниты Para Comprobarar. que. El Tipo de Una Недвижимость Sea El Esperado, El Formato Sea Prevento и т. Д.
const player = { _lives: 0, set lives(value) { if (typeof value !== 'number') { throw TypeError('lives must be a number'); } this._lives = value; } }; player.lives = 'a lot'; // TypeError: lives must be a number
Валины Dinámicos
El Hecho de que los Getter AncoQuen Funciones Cuando Los Consultamos NOS Premite Obtener El Valor Auctizado de свойства Que de Otra Forma (COMO Недвижимость данных ) Mantendrian El Valor Que Tenían Cuando Se Crehron.
function createQueue() { const items = []; return { add(item) { items.push(item); }, remove() { return items.pop(); }, get length() { return items.length; } }; } const queue = createQueue(); queue.add('item'); queue.length; // 1
Si En Ejemplo Anterhorior Hubiéramos Usado Una Свойство данных Длина
A La Que Hubiéramos Asignado items.length
, Су Васлир Симпре Девильвера La Longitud de предметы
CuAndo Se Creó El Objeto, Es Decir 0.
Реактифицировать
COMO Comentaba En El Párrafo Anductorio, Los Getter y Соседниты Están dehrás de la Reactividade en algunas librizerías y son los Отступники de que cuando stateecemos o cambiamos el valor de alguna Недвижимость SE Produzca Toda la “Magia” Asociada Asos Cambios: Actualización del Dom, Disparo de Eventos, invocación de Наблюдатели , Actualización de Computadas и т. Д.
Polymer Lo Llama “Cambios наблюдается” y su funcionamiento se basa en gravelar en un un o objeto el valor de las свойства Cuyo Cambio Deba Provocar Otros Efectos ( Имущественные эффекты ).
CADA VEZ QUE SE ETTECE EL VALOR de Una de Estas свойства se compueba en el Сеттер Si Ese Valor Ha Cambiasonce Al Que Tenía Ancormente Y Ru Caso Apirmativo Se Realizan TheDas Las Asciones Asociadas ense Cambio.
En La Siguiente Captura Podemos Ver Cómo La Actionización El Dom del Valor de Una Недвижимость ( Привязка ) SE Origina EL Сеттер De Esa имущество .
Привацидад
POR último, Лос розетки y Соседниты NOS PERMITEN PROPORCIONAR UNA FORMA DE ACCEDER A PORIDADES Que No Queremos Que SE PuEntan Modifistar случайно O Develiberade.
En El Siguiente Ejemplo Queremos Proporcionar Una Forma de Acceder Los Каналы
ООН Pubsub Перо нет Queremos Que Ese Acceso Permita También Modififar El Objeto оригинал. Devolviendo una copia del objeto en el Геттер Де Каналы
nos aseguramos de que solo podremos модификатор los Каналы
De Una Forma Controlada Mediante La API Proporcionada ( Подписаться
).
// pubsub.js const channels = {}; class PubSub { get channels() { return { ...channels }; } subscribe(channel, callback) { channels[channel] = channels[channel] || []; channels[channel].push(callback); } } export default new PubSub(); // some-file.js import pubsub from './pubsub'; pubsub.subscribe('my-channel', () => { console.log('hey!'); }); pubsub.channels['my-channel'] = 'foo'; pubsub.channels; // { 'my-channel': [ [Function] ] }
Оригинал: “https://dev.to/usepotatoes/getters-y-setters-vs-data-properties-34ab”