Оператор set прив'язує властивість об'єкта до функції, яка буде викликана під час спроби присвоїти значення даній властивості.
Синтаксис
{set prop(val) { . . . }}
{set [expression](val) { . . . }}Параметри
prop- Ім'я властивості, котра має бути прив'язана до даної функції.
val- Псевдонім змінної, що містить значення, для якого виконується спроба присвоїти його властивості
prop. - expression
- Починаючи від ECMAScript 2015, можна також використовувати вираз для обчислюваного імені властивості, до якої буде прив'язана дана функція.
Опис
У JavaScript сетер можна використати для виконання функції під час здійснення спроби змінити певну властивість. Найчастіше сетери використовуються у поєднанні з ґетерами для створення свого роду псевдовластивостей. Не можна водночас мати сетера на властивості, яка містить фактичне значення.
Зауважте особливість використання синтаксису set:
- Він може мати ідентифікатор, який є або числом, або рядком;
- Він повинен мати рівно один параметр (дивіться більше інформації у статті Несумісна зміна ES5: літеральні функції гетерів та сетерів тепер повинні мати рівно нуль аргументів та один аргумент);
- Він не повинен з'являтись у об'єктному літералі з іншим сетером чи введеними даними для тієї ж властивості.
({ set x(v) { }, set x(v) { } }та{ x: ..., set x(v) { } }заборонені)
Приклади
Визначення сетерів на нових об'єктах у об'єктних ініціалізаторах
Наступний код визначає псевдовластивість current об'єкта language. Коли current присвоюється значення, це змінює log на таке саме значення:
const language = {
set current(name) {
this.log.push(name);
},
log: []
}
language.current = 'EN';
console.log(language.log); // ['EN']
language.current = 'UA';
console.log(language.log); // ['EN', 'UA']
Зверніть увагу, що властивість current не визначена, і будь-які спроби звернутись до неї повернуть значення undefined.
Видалення сетера оператором delete
Якщо вам потрібно прибрати сетер, ви можете його просто видалити:
delete o.current;
Визначення сетера на існуючому об'єкті за допомогою defineProperty
Щоб додати сетер до існуючого об'єкта, використовуйте Object.defineProperty().
const o = {a: 0};
Object.defineProperty(o, 'b', {
set: function(x) { this.a = x / 2; }
});
o.b = 10;
// Запускає сетер, який присвоює 10 / 2 (5) властивості 'a'
console.log(o.a)
// 5Використання обчислюваного імені властивості
const expr = 'foo';
const obj = {
baz: 'bar',
set [expr](v) { this.baz = v; }
};
console.log(obj.baz);
// "bar"
obj.foo = 'baz';
// запустити сетер
console.log(obj.baz);
// "baz"
Специфікації
Сумісність з веб-переглядачами
BCD tables only load in the browser
Див. також
- гетер
deleteObject.defineProperty()__defineGetter____defineSetter__- Визначення гетерів та сетерів у посібнику JavaScript

