#javascript
Логически пытался сделать как-то так, но это неправильно: var foo = { lol: 5, kek: this.lol+3 } alert (foo.kek);
Ответы
Ответ 1
С помошью геттера var foo = { lol: 5, get kek(){ return this.lol+3 } } console.log(foo.kek);Ответ 2
Для решения этой задачи вы можете использовать функцию сеттер для свойства у которого вы хотите переопределить операцию присваивания. Ниже я привёл простой пример решения вашей задачи, так как здесь не рассмотрен вопрос инкапсуляции свойства _name - то есть запрет на изменения этого свойства напрямую human._name = '' минуя сеттер и соответственно валидацию на минимальное количество символов: let human = { _name: 'Не задано', // переменная для хранения значения свойства name name_length: 0, // переменная которую мы будем изменять при изменении свойства name set name(new_val) { if (new_val.length === 0) { // делаем валидацию // выходим из функции, после этого код функции дальше // не будет выполнятся, и присвоение неправильного значения // не произойдёт return; } // выполняем сохранение значения для текущего свойства this._name = new_val; // меняем другое свойство объекта this.name_length = new_val.length; }, get name() { // возвращаем значение свойства name return this._name; } } alert(`Имя [${human.name}], Количество символов [${human.name_length}]`); human.name = ''; // присвоение не произойдёт так как значение не валидно alert(`Имя [${human.name}], Количество символов [${human.name_length}]`); human.name = 'Алексей'; // присвоение успешно alert(`Имя [${human.name}], Количество символов [${human.name_length}]`); То есть, когда вы будете присваивать значение переменной human.name в этот момент вызовется функция в которой вы сами определяете какие операции выполнять, соответственно в этот момент вы можете присвоить значение другому свойству вашего объекта или же произвести другие операции. Подробнее о сеттерах и геттерах.
Комментариев нет:
Отправить комментарий